1- /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.5 2003/06/15 04:07:58 momjian Exp $ */
1+ /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.6 2003/06/19 09:52:11 meskes Exp $ */
22
33#define POSTGRES_ECPG_INTERNAL
44#include "postgres_fe.h"
@@ -100,11 +100,11 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
100100 switch (type )
101101 {
102102 long res ;
103- unsigned long ures ;
103+ unsigned long ures ;
104104 double dres ;
105- char * scan_length ;
106- Numeric * nres ;
107- Date ddres ;
105+ char * scan_length ;
106+ Numeric * nres ;
107+ Date ddres ;
108108 Timestamp tres ;
109109 Interval * ires ;
110110
@@ -300,37 +300,45 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
300300 case ECPGt_char :
301301 case ECPGt_unsigned_char :
302302 {
303- strncpy ((char * ) ((long ) var + offset * act_tuple ), pval , varcharsize );
304- if (varcharsize && varcharsize < strlen (pval ))
303+ if (varcharsize == 0 )
304+ {
305+ strncpy ((char * ) ((long ) var + offset * act_tuple ), pval , strlen (pval ));
306+ }
307+ else
305308 {
306- /* truncation */
307- switch (ind_type )
309+ strncpy ((char * ) ((long ) var + offset * act_tuple ), pval , varcharsize );
310+
311+ if (varcharsize < strlen (pval ))
308312 {
309- case ECPGt_short :
310- case ECPGt_unsigned_short :
311- /* ((short *) ind)[act_tuple] = strlen(pval);*/
312- * ((short * ) (ind + ind_offset * act_tuple )) = strlen (pval );
313- break ;
314- case ECPGt_int :
315- case ECPGt_unsigned_int :
316- /* ((int *) ind)[act_tuple] = strlen(pval);*/
317- * ((int * ) (ind + ind_offset * act_tuple )) = strlen (pval );
318- break ;
319- case ECPGt_long :
320- case ECPGt_unsigned_long :
321- /* ((long *) ind)[act_tuple] = strlen(pval);*/
322- * ((long * ) (ind + ind_offset * act_tuple )) = strlen (pval );
323- break ;
313+ /* truncation */
314+ switch (ind_type )
315+ {
316+ case ECPGt_short :
317+ case ECPGt_unsigned_short :
318+ /* ((short *) ind)[act_tuple] = strlen(pval);*/
319+ * ((short * ) (ind + ind_offset * act_tuple )) = strlen (pval );
320+ break ;
321+ case ECPGt_int :
322+ case ECPGt_unsigned_int :
323+ /* ((int *) ind)[act_tuple] = strlen(pval);*/
324+ * ((int * ) (ind + ind_offset * act_tuple )) = strlen (pval );
325+ break ;
326+ case ECPGt_long :
327+ case ECPGt_unsigned_long :
328+ /* ((long *) ind)[act_tuple] = strlen(pval);*/
329+ * ((long * ) (ind + ind_offset * act_tuple )) = strlen (pval );
330+ break ;
324331#ifdef HAVE_LONG_LONG_INT_64
325- case ECPGt_long_long :
326- case ECPGt_unsigned_long_long :
327- * ((long long int * ) (ind + ind_offset * act_tuple )) = strlen (pval );
328- break ;
332+ case ECPGt_long_long :
333+ case ECPGt_unsigned_long_long :
334+ * ((long long int * ) (ind + ind_offset * act_tuple )) = strlen (pval );
335+ break ;
329336#endif /* HAVE_LONG_LONG_INT_64 */
330- default :
331- break ;
337+ default :
338+ break ;
339+ }
340+ sqlca -> sqlwarn [0 ] = sqlca -> sqlwarn [1 ] = 'W' ;
332341 }
333- sqlca -> sqlwarn [0 ] = sqlca -> sqlwarn [1 ] = 'W' ;
334342 }
335343 }
336344 break ;
@@ -342,42 +350,46 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
342350
343351 variable -> len = strlen (pval );
344352 if (varcharsize == 0 )
353+ {
345354 strncpy (variable -> arr , pval , variable -> len );
355+ }
346356 else
357+ {
347358 strncpy (variable -> arr , pval , varcharsize );
348359
349- if (varcharsize > 0 && variable -> len > varcharsize )
350- {
351- /* truncation */
352- switch (ind_type )
360+ if (variable -> len > varcharsize )
353361 {
354- case ECPGt_short :
355- case ECPGt_unsigned_short :
356- /* ((short *) ind)[act_tuple] = variable->len;*/
357- * ((short * ) (ind + offset * act_tuple )) = variable -> len ;
358- break ;
359- case ECPGt_int :
360- case ECPGt_unsigned_int :
361- /* ((int *) ind)[act_tuple] = variable->len;*/
362- * ((int * ) (ind + offset * act_tuple )) = variable -> len ;
363- break ;
364- case ECPGt_long :
365- case ECPGt_unsigned_long :
366- /* ((long *) ind)[act_tuple] = variable->len;*/
367- * ((long * ) (ind + offset * act_tuple )) = variable -> len ;
368- break ;
362+ /* truncation */
363+ switch (ind_type )
364+ {
365+ case ECPGt_short :
366+ case ECPGt_unsigned_short :
367+ /* ((short *) ind)[act_tuple] = variable->len;*/
368+ * ((short * ) (ind + offset * act_tuple )) = variable -> len ;
369+ break ;
370+ case ECPGt_int :
371+ case ECPGt_unsigned_int :
372+ /* ((int *) ind)[act_tuple] = variable->len;*/
373+ * ((int * ) (ind + offset * act_tuple )) = variable -> len ;
374+ break ;
375+ case ECPGt_long :
376+ case ECPGt_unsigned_long :
377+ /* ((long *) ind)[act_tuple] = variable->len;*/
378+ * ((long * ) (ind + offset * act_tuple )) = variable -> len ;
379+ break ;
369380#ifdef HAVE_LONG_LONG_INT_64
370- case ECPGt_long_long :
371- case ECPGt_unsigned_long_long :
372- * ((long long int * ) (ind + ind_offset * act_tuple )) = variable -> len ;
373- break ;
381+ case ECPGt_long_long :
382+ case ECPGt_unsigned_long_long :
383+ * ((long long int * ) (ind + ind_offset * act_tuple )) = variable -> len ;
384+ break ;
374385#endif /* HAVE_LONG_LONG_INT_64 */
375- default :
376- break ;
377- }
378- sqlca -> sqlwarn [0 ] = sqlca -> sqlwarn [1 ] = 'W' ;
386+ default :
387+ break ;
388+ }
389+ sqlca -> sqlwarn [0 ] = sqlca -> sqlwarn [1 ] = 'W' ;
379390
380- variable -> len = varcharsize ;
391+ variable -> len = varcharsize ;
392+ }
381393 }
382394 }
383395 break ;
0 commit comments