Thread: pg_id.c windows fix
Here's a patch for pg_id.c that lets it compile cleanly and run on Windows.
cheers
andrew
Index: src/bin/pg_id/pg_id.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_id/pg_id.c,v
retrieving revision 1.22.2.1
diff -c -w -r1.22.2.1 pg_id.c
*** src/bin/pg_id/pg_id.c 7 Sep 2003 04:37:04 -0000 1.22.2.1
--- src/bin/pg_id/pg_id.c 4 Oct 2003 13:33:30 -0000
***************
*** 38,43 ****
--- 38,44 ----
char pw_name[128];
} pass_win32;
struct passwd_win32 *pw = &pass_win32;
+ DWORD pwname_size = sizeof(pass_win32.pw_name) - 1;
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_id/pg_id.c,v
retrieving revision 1.22.2.1
diff -c -w -r1.22.2.1 pg_id.c
*** src/bin/pg_id/pg_id.c 7 Sep 2003 04:37:04 -0000 1.22.2.1
--- src/bin/pg_id/pg_id.c 4 Oct 2003 13:33:30 -0000
***************
*** 38,43 ****
--- 38,44 ----
char pw_name[128];
} pass_win32;
struct passwd_win32 *pw = &pass_win32;
+ DWORD pwname_size = sizeof(pass_win32.pw_name) - 1;
pw->pw_uid = 1;
#endif
***************
*** 113,119 ****
exit(1);
}
#endif
***************
*** 113,119 ****
exit(1);
}
! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1);
#endif
#endif
if (!limit_user_info)
--- 114,120 ----
exit(1);
}
--- 114,120 ----
exit(1);
}
! GetUserName(pw->pw_name, &pwname_size);
#endif
#endif
if (!limit_user_info)
Can you tell me what Win32 compile environment can't handle a sizeof() as a function parameter? ! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1); Does casting to DWORD help? --------------------------------------------------------------------------- Andrew Dunstan wrote: > Here's a patch for pg_id.c that lets it compile cleanly and run on Windows. > > cheers > > andrew > > Index: src/bin/pg_id/pg_id.c > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_id/pg_id.c,v > retrieving revision 1.22.2.1 > diff -c -w -r1.22.2.1 pg_id.c > *** src/bin/pg_id/pg_id.c 7 Sep 2003 04:37:04 -0000 1.22.2.1 > --- src/bin/pg_id/pg_id.c 4 Oct 2003 13:33:30 -0000 > *************** > *** 38,43 **** > --- 38,44 ---- > char pw_name[128]; > } pass_win32; > struct passwd_win32 *pw = &pass_win32; > + DWORD pwname_size = sizeof(pass_win32.pw_name) - 1; > > pw->pw_uid = 1; > #endif > *************** > *** 113,119 **** > exit(1); > } > > ! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1); > #endif > > if (!limit_user_info) > --- 114,120 ---- > exit(1); > } > > ! GetUserName(pw->pw_name, &pwname_size); > #endif > > if (!limit_user_info) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
On Sun, 5 Oct 2003, Bruce Momjian wrote: > > Can you tell me what Win32 compile environment can't handle a sizeof() > as a function parameter? > > ! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1); > > Does casting to DWORD help? > > ! GetUserName(pw->pw_name, &pwname_size); It looks like the second argument is supposed to be a pointer and probably returns back the length actually used (if it follows the pattern of other win32 calls) It's something like: BOOL GetUserName( LPTSTR lpBuffer, // address of name buffer LPDWORD nSize // address of size of name buffer );
That's not the issue. It complained because it wanted a pointer to the size. The relevant lines in winbase.h files are: BOOL WINAPI GetUserNameA (LPSTR,PDWORD); #define GetUserName GetUserNameA I am using Mingw. cheers andrew ----- Original Message ----- From: "Bruce Momjian" <pgman@candle.pha.pa.us> To: "Andrew Dunstan" <andrew@dunslane.net> Cc: "PG Patches" <pgsql-patches@postgresql.org> Sent: Sunday, October 05, 2003 12:17 AM Subject: Re: [PATCHES] pg_id.c windows fix > > Can you tell me what Win32 compile environment can't handle a sizeof() > as a function parameter? > > ! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1); > > Does casting to DWORD help? > > -------------------------------------------------------------------------- - > > Andrew Dunstan wrote: > > Here's a patch for pg_id.c that lets it compile cleanly and run on Windows. > > > > cheers > > > > andrew > > > > Index: src/bin/pg_id/pg_id.c > > =================================================================== > > RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_id/pg_id.c,v > > retrieving revision 1.22.2.1 > > diff -c -w -r1.22.2.1 pg_id.c > > *** src/bin/pg_id/pg_id.c 7 Sep 2003 04:37:04 -0000 1.22.2.1 > > --- src/bin/pg_id/pg_id.c 4 Oct 2003 13:33:30 -0000 > > *************** > > *** 38,43 **** > > --- 38,44 ---- > > char pw_name[128]; > > } pass_win32; > > struct passwd_win32 *pw = &pass_win32; > > + DWORD pwname_size = sizeof(pass_win32.pw_name) - 1; > > > > pw->pw_uid = 1; > > #endif > > *************** > > *** 113,119 **** > > exit(1); > > } > > > > ! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1); > > #endif > > > > if (!limit_user_info) > > --- 114,120 ---- > > exit(1); > > } > > > > ! GetUserName(pw->pw_name, &pwname_size); > > #endif > > > > if (!limit_user_info) > > -- > Bruce Momjian | http://candle.pha.pa.us > pgman@candle.pha.pa.us | (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
OK, patch applied. I changed DWORD to unsigned long. --------------------------------------------------------------------------- Andrew Dunstan wrote: > Here's a patch for pg_id.c that lets it compile cleanly and run on Windows. > > cheers > > andrew > > Index: src/bin/pg_id/pg_id.c > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_id/pg_id.c,v > retrieving revision 1.22.2.1 > diff -c -w -r1.22.2.1 pg_id.c > *** src/bin/pg_id/pg_id.c 7 Sep 2003 04:37:04 -0000 1.22.2.1 > --- src/bin/pg_id/pg_id.c 4 Oct 2003 13:33:30 -0000 > *************** > *** 38,43 **** > --- 38,44 ---- > char pw_name[128]; > } pass_win32; > struct passwd_win32 *pw = &pass_win32; > + DWORD pwname_size = sizeof(pass_win32.pw_name) - 1; > > pw->pw_uid = 1; > #endif > *************** > *** 113,119 **** > exit(1); > } > > ! GetUserName(pw->pw_name, sizeof(pw->pw_name)-1); > #endif > > if (!limit_user_info) > --- 114,120 ---- > exit(1); > } > > ! GetUserName(pw->pw_name, &pwname_size); > #endif > > if (!limit_user_info) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073