@@ -107,35 +107,37 @@ __attribute__((unused)) static void GSFreeTempBuffer(void **b)
107107 if (NULL != *b) free (*b);
108108}
109109# define GS_BEGINITEMBUF (P, S, T ) { \
110- T _ibuf[GS_MAX_OBJECTS_FROM_STACK ];\
110+ unsigned _ilen = (S) > 0 ? (S) : 1 ; \
111+ T _ibuf[_ilen <= GS_MAX_OBJECTS_FROM_STACK ? _ilen : 1 ]; \
111112 T *P = _ibuf;\
112113 __attribute__ ((cleanup (GSFreeTempBuffer))) void *_base = 0 ;\
113- if (S > GS_MAX_OBJECTS_FROM_STACK )\
114+ if (_ilen > GS_MAX_OBJECTS_FROM_STACK )\
114115 {\
115- _base = malloc ((S) * sizeof (T));\
116+ _base = malloc (_ilen * sizeof (T));\
116117 P = _base;\
117118 }
118119# define GS_BEGINITEMBUF2 (P, S, T ) { \
119- T _ibuf2[GS_MAX_OBJECTS_FROM_STACK ];\
120+ unsigned _ilen2 = (S) > 0 ? (S) : 1 ; \
121+ T _ibuf2[_ilen2 <= GS_MAX_OBJECTS_FROM_STACK ? _ilen2 : 1 ]; \
120122 T *P = _ibuf2;\
121123 __attribute__ ((cleanup (GSFreeTempBuffer))) void *_base2 = 0 ;\
122- if (S > GS_MAX_OBJECTS_FROM_STACK )\
124+ if (_ilen2 > GS_MAX_OBJECTS_FROM_STACK )\
123125 {\
124- _base2 = malloc ((S) * sizeof (T));\
126+ _base2 = malloc (_ilen2 * sizeof (T));\
125127 P = _base2;\
126128 }
127129#else
128- /* Make minimum size of _ibuf 1 to avoid compiler warnings.
129- */
130130# define GS_BEGINITEMBUF (P, S, T ) { \
131- T _ibuf[(S) > 0 && (S) <= GS_MAX_OBJECTS_FROM_STACK ? (S) : 1 ]; \
132- T *_base = ((S) <= GS_MAX_OBJECTS_FROM_STACK ) ? _ibuf \
133- : (T*)malloc ((S) * sizeof (T)); \
131+ unsigned _ilen = (S) > 0 ? (S) : 1 ; \
132+ T _ibuf[_ilen <= GS_MAX_OBJECTS_FROM_STACK ? _ilen : 1 ]; \
133+ T *_base = (_ilen <= GS_MAX_OBJECTS_FROM_STACK ) ? _ibuf \
134+ : (T*)malloc (_ilen * sizeof (T)); \
134135 T *(P) = _base;
135136# define GS_BEGINITEMBUF2 (P, S, T ) { \
136- T _ibuf2[(S) > 0 && (S) <= GS_MAX_OBJECTS_FROM_STACK ? (S) : 1 ]; \
137- T *_base2 = ((S) <= GS_MAX_OBJECTS_FROM_STACK ) ? _ibuf2 \
138- : (T*)malloc ((S) * sizeof (T)); \
137+ unsigned _ilen2 = (S) > 0 ? (S) : 1 ; \
138+ T _ibuf2[_ilen2 <= GS_MAX_OBJECTS_FROM_STACK ? _ilen2 : 1 ]; \
139+ T *_base2 = (_ilen2 <= GS_MAX_OBJECTS_FROM_STACK ) ? _ibuf2 \
140+ : (T*)malloc (_ilen2 * sizeof (T)); \
139141 T *(P) = _base2;
140142#endif
141143
0 commit comments