Re: [PATCH 2/3] getpwuid(mingw): provide a better default for the user name
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Oct 16, 2018, 12:38 UTC
- Message-ID
- <nycvar.QRO.7.76.6.1810161436480.4546@tvgsbejvaqbjf.bet>
- In-Reply-To
- <CAPig+cRbOOrC5_jCnR2ohMZWoYXfNqvWtj3m_JTpudJhV1mQng@mail.gmail.com>
Hi Eric,
On Mon, 15 Oct 2018, Eric Sunshine wrote:
Show 17 quoted lines
> On Mon, Oct 15, 2018 at 5:47 AM Johannes Schindelin via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
> > We do have the excellent GetUserInfoEx() function to obtain more
> > detailed information of the current user (if the user is part of a
> > Windows domain); Let's use it.
> > [...]
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> > diff --git a/compat/mingw.c b/compat/mingw.c
> > @@ -1798,6 +1799,33 @@ int mingw_getpagesize(void)
> > +static char *get_extended_user_info(enum EXTENDED_NAME_FORMAT type)
> > +{
> > + DECLARE_PROC_ADDR(secur32.dll, BOOL, GetUserNameExW,
> > + enum EXTENDED_NAME_FORMAT, LPCWSTR, PULONG);
> > + static wchar_t wbuffer[1024];
>
> Does this need to be static? It's not being returned to the caller.It does not. Fixed.
> > + len = ARRAY_SIZE(wbuffer);
> > + if (GetUserNameExW(type, wbuffer, &len)) {
> > + char *converted = xmalloc((len *= 3));Oh wow. I *just* realized this. It is an off-by-one: the `xmalloc()` call needs to receive `len + 1` to accommodate for the trailing NUL. Will fix, too.
Ciao, Dscho
Show 12 quoted lines
> > + if (xwcstoutf(converted, wbuffer, len) >= 0) > > + return converted; > > + free(converted); > > + } > > If xwcstoutf() fails, 'converted' is freed; otherwise, the allocated > 'converted' is stored in the caller's statically held 'passwd' struct. > Okay. > > > + return NULL; > > +} >