mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-14 19:55:12 +01:00
cleaned up the errno mess for GETPWUID. we especially don't want to
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org> * gutils.c (g_get_any_init): cleaned up the errno mess for GETPWUID. we especially don't want to g_error() out here! the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't gcc related. if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before resetting it to NULL, why are we doing this anyways? reordered code a bit so we always provide defaults (except for g_home_dir).
This commit is contained in:
parent
73fabcee29
commit
63cc3f3cfb
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -1,3 +1,14 @@
|
||||
Sat Jan 23 02:14:28 1999 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gutils.c (g_get_any_init): cleaned up the errno mess for
|
||||
GETPWUID. we especially don't want to g_error() out here!
|
||||
the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
|
||||
gcc related.
|
||||
if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
|
||||
resetting it to NULL, why are we doing this anyways?
|
||||
reordered code a bit so we always provide defaults (except
|
||||
for g_home_dir).
|
||||
|
||||
Thu Jan 21 12:40:11 EST 1999 Jeff Garzik <jgarzik@pobox.com>
|
||||
|
||||
* tests/{Makefile.am, string-test.c, strfunc-test.c}:
|
||||
|
@ -371,6 +371,7 @@ g_getenv (const gchar *variable)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
G_LOCK_DECLARE_STATIC (g_utils_global);
|
||||
|
||||
static gchar *g_tmp_dir = NULL;
|
||||
@ -400,6 +401,7 @@ g_get_any_init (void)
|
||||
g_tmp_dir[k-1] = '\0';
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!g_tmp_dir)
|
||||
{
|
||||
#ifndef NATIVE_WIN32
|
||||
@ -428,51 +430,55 @@ g_get_any_init (void)
|
||||
g_free (homedrive);
|
||||
g_free (homepath);
|
||||
}
|
||||
#endif /* !NATIVE_WIN32 */
|
||||
|
||||
if (!g_home_dir)
|
||||
g_home_dir = g_strdup (g_getenv ("HOME"));
|
||||
#else
|
||||
g_home_dir = g_strdup (g_getenv ("HOME"));
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef HAVE_PWD_H
|
||||
{
|
||||
struct passwd *pw = NULL, pwd;
|
||||
struct passwd *pw = NULL;
|
||||
gpointer buffer = NULL;
|
||||
guint bufsize = sizeof (struct passwd);
|
||||
# ifdef HAVE_GETPWUID_R
|
||||
while (TRUE)
|
||||
|
||||
# ifdef HAVE_GETPWUID_R
|
||||
struct passwd pwd;
|
||||
guint bufsize = 1; // sizeof (struct passwd);
|
||||
gint error;
|
||||
|
||||
do
|
||||
{
|
||||
int error = 0;
|
||||
errno = 0;
|
||||
buffer = g_realloc (buffer, bufsize);
|
||||
g_free (buffer);
|
||||
buffer = g_malloc (bufsize);
|
||||
|
||||
# ifdef HAVE_GETPWUID_R_POSIX
|
||||
error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
|
||||
if (errno == 0) /* The errorcode is in error (might be 0, too) */
|
||||
errno = error;
|
||||
# else /* HAVE_GETPWUID_R_POSIX */
|
||||
error = error ? errno : 0;
|
||||
# else /* !HAVE_GETPWUID_R_POSIX */
|
||||
pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
|
||||
# endif /* HAVE_GETPWUID_R_POSIX */
|
||||
if (errno == 0)
|
||||
{
|
||||
g_assert (pw);
|
||||
break;
|
||||
}
|
||||
error = errno;
|
||||
# endif /* !HAVE_GETPWUID_R_POSIX */
|
||||
|
||||
if (errno != ERANGE)
|
||||
g_error ("Could not read account information: %s",
|
||||
g_strerror (errno));
|
||||
bufsize *= 2;
|
||||
}
|
||||
# else /* HAVE_GETPWUID_R */
|
||||
# if defined(G_THREADS_ENABLED) && defined(__GNUC__)
|
||||
while (error == ERANGE);
|
||||
|
||||
if (error)
|
||||
g_warning ("getpwuid_r(): failed due to: %s", g_strerror (error));
|
||||
|
||||
# else /* !HAVE_GETPWUID_R */
|
||||
|
||||
# ifdef G_THREADS_ENABLED
|
||||
# warning "the `g_get_(user_name|real_name|home_dir|tmp_dir)'"
|
||||
# warning "functions will not be MT-safe during their first call"
|
||||
# warning "because there is no `getpwuid_r' on your system."
|
||||
# endif
|
||||
# endif /* G_THREADS_ENABLED */
|
||||
|
||||
setpwent ();
|
||||
pw = getpwuid (getuid ());
|
||||
endpwent ();
|
||||
# endif /* HAVE_GETPWUID_R */
|
||||
|
||||
# endif /* !HAVE_GETPWUID_R */
|
||||
|
||||
if (pw)
|
||||
{
|
||||
@ -483,28 +489,32 @@ g_get_any_init (void)
|
||||
}
|
||||
g_free (buffer);
|
||||
}
|
||||
|
||||
#else /* !HAVE_PWD_H */
|
||||
|
||||
# ifdef NATIVE_WIN32
|
||||
{
|
||||
guint len = 17;
|
||||
gchar buffer[17];
|
||||
|
||||
g_user_name = g_new (gchar, len);
|
||||
|
||||
if (!GetUserName (g_user_name, &len))
|
||||
if (GetUserName (buffer, &len))
|
||||
{
|
||||
g_free (g_user_name);
|
||||
g_user_name = g_strdup ("somebody");
|
||||
g_real_name = g_strdup ("Unknown");
|
||||
g_user_name = g_strdup (buffer);
|
||||
g_real_name = g_strdup (buffer);
|
||||
}
|
||||
else
|
||||
g_real_name = g_strdup (g_user_name);
|
||||
}
|
||||
# else /* !NATIVE_WIN32 */
|
||||
g_user_name = g_strdup ("somebody");
|
||||
g_real_name = g_strdup ("Unknown");
|
||||
/* why are we forcefully setting g_home_dir to NULL here? */
|
||||
g_free (g_home_dir);
|
||||
g_home_dir = NULL;
|
||||
# endif /* !NATIVE_WIN32 */
|
||||
|
||||
#endif /* !HAVE_PWD_H */
|
||||
|
||||
if (!g_user_name)
|
||||
g_user_name = g_strdup ("somebody");
|
||||
if (!g_real_name)
|
||||
g_real_name = g_strdup ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
|
82
gutils.c
82
gutils.c
@ -371,6 +371,7 @@ g_getenv (const gchar *variable)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
G_LOCK_DECLARE_STATIC (g_utils_global);
|
||||
|
||||
static gchar *g_tmp_dir = NULL;
|
||||
@ -400,6 +401,7 @@ g_get_any_init (void)
|
||||
g_tmp_dir[k-1] = '\0';
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!g_tmp_dir)
|
||||
{
|
||||
#ifndef NATIVE_WIN32
|
||||
@ -428,51 +430,55 @@ g_get_any_init (void)
|
||||
g_free (homedrive);
|
||||
g_free (homepath);
|
||||
}
|
||||
#endif /* !NATIVE_WIN32 */
|
||||
|
||||
if (!g_home_dir)
|
||||
g_home_dir = g_strdup (g_getenv ("HOME"));
|
||||
#else
|
||||
g_home_dir = g_strdup (g_getenv ("HOME"));
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef HAVE_PWD_H
|
||||
{
|
||||
struct passwd *pw = NULL, pwd;
|
||||
struct passwd *pw = NULL;
|
||||
gpointer buffer = NULL;
|
||||
guint bufsize = sizeof (struct passwd);
|
||||
# ifdef HAVE_GETPWUID_R
|
||||
while (TRUE)
|
||||
|
||||
# ifdef HAVE_GETPWUID_R
|
||||
struct passwd pwd;
|
||||
guint bufsize = 1; // sizeof (struct passwd);
|
||||
gint error;
|
||||
|
||||
do
|
||||
{
|
||||
int error = 0;
|
||||
errno = 0;
|
||||
buffer = g_realloc (buffer, bufsize);
|
||||
g_free (buffer);
|
||||
buffer = g_malloc (bufsize);
|
||||
|
||||
# ifdef HAVE_GETPWUID_R_POSIX
|
||||
error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
|
||||
if (errno == 0) /* The errorcode is in error (might be 0, too) */
|
||||
errno = error;
|
||||
# else /* HAVE_GETPWUID_R_POSIX */
|
||||
error = error ? errno : 0;
|
||||
# else /* !HAVE_GETPWUID_R_POSIX */
|
||||
pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
|
||||
# endif /* HAVE_GETPWUID_R_POSIX */
|
||||
if (errno == 0)
|
||||
{
|
||||
g_assert (pw);
|
||||
break;
|
||||
}
|
||||
error = errno;
|
||||
# endif /* !HAVE_GETPWUID_R_POSIX */
|
||||
|
||||
if (errno != ERANGE)
|
||||
g_error ("Could not read account information: %s",
|
||||
g_strerror (errno));
|
||||
bufsize *= 2;
|
||||
}
|
||||
# else /* HAVE_GETPWUID_R */
|
||||
# if defined(G_THREADS_ENABLED) && defined(__GNUC__)
|
||||
while (error == ERANGE);
|
||||
|
||||
if (error)
|
||||
g_warning ("getpwuid_r(): failed due to: %s", g_strerror (error));
|
||||
|
||||
# else /* !HAVE_GETPWUID_R */
|
||||
|
||||
# ifdef G_THREADS_ENABLED
|
||||
# warning "the `g_get_(user_name|real_name|home_dir|tmp_dir)'"
|
||||
# warning "functions will not be MT-safe during their first call"
|
||||
# warning "because there is no `getpwuid_r' on your system."
|
||||
# endif
|
||||
# endif /* G_THREADS_ENABLED */
|
||||
|
||||
setpwent ();
|
||||
pw = getpwuid (getuid ());
|
||||
endpwent ();
|
||||
# endif /* HAVE_GETPWUID_R */
|
||||
|
||||
# endif /* !HAVE_GETPWUID_R */
|
||||
|
||||
if (pw)
|
||||
{
|
||||
@ -483,28 +489,32 @@ g_get_any_init (void)
|
||||
}
|
||||
g_free (buffer);
|
||||
}
|
||||
|
||||
#else /* !HAVE_PWD_H */
|
||||
|
||||
# ifdef NATIVE_WIN32
|
||||
{
|
||||
guint len = 17;
|
||||
gchar buffer[17];
|
||||
|
||||
g_user_name = g_new (gchar, len);
|
||||
|
||||
if (!GetUserName (g_user_name, &len))
|
||||
if (GetUserName (buffer, &len))
|
||||
{
|
||||
g_free (g_user_name);
|
||||
g_user_name = g_strdup ("somebody");
|
||||
g_real_name = g_strdup ("Unknown");
|
||||
g_user_name = g_strdup (buffer);
|
||||
g_real_name = g_strdup (buffer);
|
||||
}
|
||||
else
|
||||
g_real_name = g_strdup (g_user_name);
|
||||
}
|
||||
# else /* !NATIVE_WIN32 */
|
||||
g_user_name = g_strdup ("somebody");
|
||||
g_real_name = g_strdup ("Unknown");
|
||||
/* why are we forcefully setting g_home_dir to NULL here? */
|
||||
g_free (g_home_dir);
|
||||
g_home_dir = NULL;
|
||||
# endif /* !NATIVE_WIN32 */
|
||||
|
||||
#endif /* !HAVE_PWD_H */
|
||||
|
||||
if (!g_user_name)
|
||||
g_user_name = g_strdup ("somebody");
|
||||
if (!g_real_name)
|
||||
g_real_name = g_strdup ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -341,6 +341,10 @@ main (int argc,
|
||||
string = g_get_current_dir ();
|
||||
g_print ("cwd: %s\n", string);
|
||||
g_free (string);
|
||||
g_print ("user: %s\n", g_get_user_name ());
|
||||
g_print ("real: %s\n", g_get_real_name ());
|
||||
g_print ("home: %s\n", g_get_home_dir ());
|
||||
g_print ("tmp-dir: %s\n", g_get_tmp_dir ());
|
||||
|
||||
/* type sizes */
|
||||
g_print ("checking size of gint8: %d", (int)sizeof (gint8));
|
||||
|
@ -341,6 +341,10 @@ main (int argc,
|
||||
string = g_get_current_dir ();
|
||||
g_print ("cwd: %s\n", string);
|
||||
g_free (string);
|
||||
g_print ("user: %s\n", g_get_user_name ());
|
||||
g_print ("real: %s\n", g_get_real_name ());
|
||||
g_print ("home: %s\n", g_get_home_dir ());
|
||||
g_print ("tmp-dir: %s\n", g_get_tmp_dir ());
|
||||
|
||||
/* type sizes */
|
||||
g_print ("checking size of gint8: %d", (int)sizeof (gint8));
|
||||
|
Loading…
x
Reference in New Issue
Block a user