Re: libpq build problem with <io.h> on MS VC++

Bruce Momjian <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.win32,gmane.comp.db.postgresql.devel.patches
Message-ID <[email protected]>
OK, I have improved your comment and applied the patch. I mentioned the
problem is only on MS C, but we might as well include io.h there on all
Win32 platforms.

---------------------------------------------------------------------------

Andrew Francis wrote:
> Hi all
> 
> When building libpq using Visual Studio .NET 2002 (ie Visual C++ 7.0), I 
> encounter this error:
> 
> fe-lobj.c
> C:\Program Files\Microsoft Visual Studio .NET\Vc7\include\io.h(205) : error 
> C2375: 'pgrename' : redefinition; different linkage
>          c:\libs\postgresql\src\include\port.h(148) : see declaration of 
> 'pgrename'
> C:\Program Files\Microsoft Visual Studio .NET\Vc7\include\io.h(275) : error 
> C2375: 'pgunlink' : redefinition; different linkage
>          c:\libs\postgresql\src\include\port.h(149) : see declaration of 
> 'pgunlink'
> 
> 
> As rename/unlink are #define'd to pgrename/pgunlink prior to <io.h>'s inclusion.
> 
> 
> Simply reordering the headers fixes the problem (see attachment).
> 
> 
> I believe this may be a problem on my compiler, but not necessarily others, 
> due to an additional compiler directive on the definition in io.h:
> 
>    #define _CRTIMP __declspec(dllimport)
>       ...
>    _CRTIMP int __cdecl unlink(const char *);
> 
> port.h's definition of pgrename() is obviously lacking a __declspec(dllimport).
> 
> 
> Regards,
> 
> -- 
> Andrew Francis
> Lead Developer - Software
> Family Health Network
> 
> 

> *** fe-lobj-old.c	Wed Aug 11 14:56:16 2004
> --- fe-lobj.c	Wed Aug 11 14:55:55 2004
> ***************
> *** 13,33 ****
>    *-------------------------------------------------------------------------
>    */
> - #include "postgres_fe.h"
>   
> ! #include <fcntl.h>
> ! #include <sys/stat.h>
> ! #include <errno.h>
>   
>   #ifdef WIN32
>   #include "win32.h"
> - #include "io.h"
>   #else
>   #include <unistd.h>
>   #endif
>   
>   #include "libpq-fe.h"
>   #include "libpq-int.h"
>   #include "libpq/libpq-fs.h"		/* must come after sys/stat.h */
> - 
>   
>   #define LO_BUFSIZE		  8192
> --- 13,40 ----
>    *-------------------------------------------------------------------------
>    */
>   
> ! #ifdef WIN32
> ! /*
> !  * As unlink/rename are #define'd in port.h (via postgres_fe.h), io.h
> !  * must be included first.
> !  */
> ! #include <io.h>
> ! #endif
> ! 
> ! #include "postgres_fe.h"
>   
>   #ifdef WIN32
>   #include "win32.h"
>   #else
>   #include <unistd.h>
>   #endif
>   
> + #include <fcntl.h>
> + #include <sys/stat.h>
> + #include <errno.h>
> + 
>   #include "libpq-fe.h"
>   #include "libpq-int.h"
>   #include "libpq/libpq-fs.h"		/* must come after sys/stat.h */
>   
>   #define LO_BUFSIZE		  8192

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
>                http://www.postgresql.org/docs/faqs/FAQ.html

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [email protected]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073


---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster
/bjm/diff (text/plain, 1.5 KB)
Index: src/interfaces/libpq/fe-lobj.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-lobj.c,v
retrieving revision 1.48
diff -c -c -r1.48 fe-lobj.c
*** src/interfaces/libpq/fe-lobj.c	5 Mar 2004 01:53:59 -0000	1.48
--- src/interfaces/libpq/fe-lobj.c	17 Aug 2004 02:41:10 -0000
***************
*** 12,35 ****
   *
   *-------------------------------------------------------------------------
   */
- #include "postgres_fe.h"
  
! #include <fcntl.h>
! #include <sys/stat.h>
! #include <errno.h>
  
  #ifdef WIN32
  #include "win32.h"
- #include "io.h"
  #else
  #include <unistd.h>
  #endif
  
  #include "libpq-fe.h"
  #include "libpq-int.h"
  #include "libpq/libpq-fs.h"		/* must come after sys/stat.h */
  
- 
  #define LO_BUFSIZE		  8192
  
  static int	lo_initialize(PGconn *conn);
--- 12,43 ----
   *
   *-------------------------------------------------------------------------
   */
  
! #ifdef WIN32
! /*
!  *	As unlink/rename are #define'd in port.h (via postgres_fe.h), io.h
!  *	must be included first on MS C.  Might as well do it for all WIN32's
!  *	here.
!  */
! #include <io.h>
! #endif
! 
! #include "postgres_fe.h"
  
  #ifdef WIN32
  #include "win32.h"
  #else
  #include <unistd.h>
  #endif
  
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <errno.h>
+ 
  #include "libpq-fe.h"
  #include "libpq-int.h"
  #include "libpq/libpq-fs.h"		/* must come after sys/stat.h */
  
  #define LO_BUFSIZE		  8192
  
  static int	lo_initialize(PGconn *conn);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.