ecpg problem : pre-processor translated long constant to char - Mailing list pgsql-admin

From Raymond Fung
Subject ecpg problem : pre-processor translated long constant to char
Date
Msg-id 3D23AC21.FC1D6579@iohk.com
Whole thread Raw
Responses Re: [HACKERS] ecpg problem : pre-processor translated long constant to char
List pgsql-admin
Dear all,

A simple testing program :

* * * * * * * * * * * * * *  begin  * * * * * * * * * * * * * * * *

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  unsigned int   v;

  v = 0x87654321L;

  return (0);
}

* * * * * * * * * * * * * *  end  * * * * * * * * * * * * * * * *

compile with ecpg using :

  ecpg -o mytest.c -I/usr/include/pgsql mytest.pgc

produces the output C program file as follow :

* * * * * * * * * * * * * *  begin  * * * * * * * * * * * * * * * *

/* Processed by ecpg (2.8.0) */
/* These three include files are added by the preprocessor */
#include <ecpgtype.h>
#include <ecpglib.h>
#include <ecpgerrno.h>
#line 1 "test.pgc"
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  unsigned int   v;

  v = '0x87654321'L;

  return (0);
}

* * * * * * * * * * * * * * *  end  * * * * * * * * * * * * * * *

It has translated the 4 bytes constant (0x87654321) into a one byte
char constant (within the single quotes) during pre-processing. Seems
this happens only when the high bit of the constant is set (i.e. it
won't add the quotes if the constant is 0x12345678).

Also, I noticed that the line number reported during the preprocessing
error output is incorrect : it is '1' less than the actual line number
in the source file. As shown, I am using version 2.8.0 of ecpg. Is my
version being too old to be buggy ? Any suggestion to bypass the
translation problem ?

Thanks,
Raymond Fung.



pgsql-admin by date:

Previous
From: Robert Treat
Date:
Subject: Re: PostGre SQL on linux
Next
From: Oon Arfiandwi Martyono
Date:
Subject: Database Access Limitation (cann't use IDENT).