Re: [PATCH 1/3] getpwuid(mingw): initialize the structure only once
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Oct 15, 2018, 14:25 UTC
- Message-ID
- <CAPig+cS3Bz3uaxWv23bQEXB7Ok=Q+V07mGc-Fysg-WU3DKKagA@mail.gmail.com>
- In-Reply-To
- <63373dd91d0be324273ab34ff49d630453954173.1539596822.git.gitgitgadget@gmail.com>
On Mon, Oct 15, 2018 at 5:47 AM Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com> wrote:
Show 19 quoted lines
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
> diff --git a/compat/mingw.c b/compat/mingw.c
> @@ -1800,16 +1800,27 @@ int mingw_getpagesize(void)
> struct passwd *getpwuid(int uid)
> {
> + static unsigned initialized;
> static char user_name[100];
> - static struct passwd p;
> + static struct passwd *p;
>
> + if (initialized)
> + return p;
> +
> + len = sizeof(user_name);
> + if (!GetUserName(user_name, &len)) {
> + initialized = 1;
> return NULL;
> + }If GetUserName() fails, that failure is recorded (as "initialized=1" and 'p' is still NULL), so subsequent invocations just return NULL without doing any more work. Makes sense.
Show 8 quoted lines
> + p = xmalloc(sizeof(*p)); > + p->pw_name = user_name; > + p->pw_gecos = "unknown"; > + p->pw_dir = NULL; > + > + initialized = 1; > + return p; > }