@@ -96,9 +96,9 @@ ECPGdo(int lineno, char *query,...)
96
96
while (type != ECPGt_EOIT )
97
97
{
98
98
void * value = NULL ;
99
- short varcharsize ;
100
- short size ;
101
- short arrsize ;
99
+ long varcharsize ;
100
+ long size ;
101
+ long arrsize ;
102
102
103
103
char * newcopy ;
104
104
char * mallocedval = NULL ;
@@ -110,20 +110,18 @@ ECPGdo(int lineno, char *query,...)
110
110
contents to arrive in a comma-separated list on insert (I think). */
111
111
112
112
value = va_arg (ap , void * );
113
- varcharsize = va_arg (ap , short );
114
- size = va_arg (ap , short );
115
- arrsize = va_arg (ap , short );
113
+ varcharsize = va_arg (ap , long );
114
+ size = va_arg (ap , long );
115
+ arrsize = va_arg (ap , long );
116
116
117
117
switch (type )
118
118
{
119
- case ECPGt_char :
120
119
case ECPGt_short :
121
120
case ECPGt_int :
122
121
sprintf (buff , "%d" , * (int * ) value );
123
122
tobeinserted = buff ;
124
123
break ;
125
124
126
- case ECPGt_unsigned_char :
127
125
case ECPGt_unsigned_short :
128
126
case ECPGt_unsigned_int :
129
127
sprintf (buff , "%d" , * (unsigned int * ) value );
@@ -155,6 +153,27 @@ ECPGdo(int lineno, char *query,...)
155
153
tobeinserted = buff ;
156
154
break ;
157
155
156
+ case ECPGt_char :
157
+ case ECPGt_unsigned_char :
158
+ {
159
+ /* set slen to string length if type is char * */
160
+ int slen = (varcharsize == 0 ) ? strlen ((char * ) value ) : varcharsize ;
161
+
162
+ newcopy = (char * ) malloc (slen + 1 );
163
+ strncpy (newcopy , (char * ) value , slen );
164
+ newcopy [slen ] = '\0' ;
165
+
166
+ mallocedval = (char * ) malloc (2 * strlen (newcopy ) + 3 );
167
+ strcpy (mallocedval , "'" );
168
+ strcat (mallocedval , quote_postgres (newcopy ));
169
+ strcat (mallocedval , "'" );
170
+
171
+ free (newcopy );
172
+
173
+ tobeinserted = mallocedval ;
174
+ }
175
+ break ;
176
+
158
177
case ECPGt_varchar :
159
178
case ECPGt_varchar2 :
160
179
{
@@ -274,7 +293,7 @@ ECPGdo(int lineno, char *query,...)
274
293
275
294
if (n < 1 )
276
295
{
277
- ECPGlog ("ECPGdo lineno %d: Incorrect number of matches: %d\n" ,
296
+ ECPGlog ("ECPGdo line %d: Incorrect number of matches: %d\n" ,
278
297
lineno , n );
279
298
register_error (1 , "Data not found line %d." , lineno );
280
299
break ;
@@ -293,9 +312,9 @@ ECPGdo(int lineno, char *query,...)
293
312
for (x = 0 ; x < m && status ; x ++ )
294
313
{
295
314
void * value = NULL ;
296
- short varcharsize ;
297
- short size ;
298
- short arrsize ;
315
+ long varcharsize ;
316
+ long size ;
317
+ long arrsize ;
299
318
300
319
char * pval = PQgetvalue (results , 0 , x );
301
320
@@ -311,17 +330,16 @@ ECPGdo(int lineno, char *query,...)
311
330
/* We will have to decode the value */
312
331
type = va_arg (ap , enum ECPGttype );
313
332
value = va_arg (ap , void * );
314
- varcharsize = va_arg (ap , short );
315
- size = va_arg (ap , short );
316
- arrsize = va_arg (ap , short );
333
+ varcharsize = va_arg (ap , long );
334
+ size = va_arg (ap , long );
335
+ arrsize = va_arg (ap , long );
317
336
318
337
switch (type )
319
338
{
320
339
long res ;
321
340
unsigned long ures ;
322
341
double dres ;
323
342
324
- case ECPGt_char :
325
343
case ECPGt_short :
326
344
case ECPGt_int :
327
345
case ECPGt_long :
@@ -342,9 +360,6 @@ ECPGdo(int lineno, char *query,...)
342
360
/* Again?! Yes */
343
361
switch (type )
344
362
{
345
- case ECPGt_char :
346
- * (char * ) value = (char ) res ;
347
- break ;
348
363
case ECPGt_short :
349
364
* (short * ) value = (short ) res ;
350
365
break ;
@@ -360,7 +375,6 @@ ECPGdo(int lineno, char *query,...)
360
375
}
361
376
break ;
362
377
363
- case ECPGt_unsigned_char :
364
378
case ECPGt_unsigned_short :
365
379
case ECPGt_unsigned_int :
366
380
case ECPGt_unsigned_long :
@@ -381,9 +395,6 @@ ECPGdo(int lineno, char *query,...)
381
395
/* Again?! Yes */
382
396
switch (type )
383
397
{
384
- case ECPGt_unsigned_char :
385
- * (unsigned char * ) value = (unsigned char ) ures ;
386
- break ;
387
398
case ECPGt_unsigned_short :
388
399
* (unsigned short * ) value = (unsigned short ) ures ;
389
400
break ;
@@ -452,6 +463,20 @@ ECPGdo(int lineno, char *query,...)
452
463
return false;
453
464
break ;
454
465
466
+ case ECPGt_char :
467
+ case ECPGt_unsigned_char :
468
+ {
469
+ if (varcharsize == 0 )
470
+ {
471
+ /* char* */
472
+ strncpy ((char * ) value , pval , strlen (pval ));
473
+ ((char * ) value )[strlen (pval )] = '\0' ;
474
+ }
475
+ else
476
+ strncpy ((char * ) value , pval , varcharsize );
477
+ }
478
+ break ;
479
+
455
480
case ECPGt_varchar :
456
481
{
457
482
struct ECPGgeneric_varchar * var =
0 commit comments