Rewrite not to look at `errno' if library call succeeds, since `errno' is
authorRaja R Harinath <harinath@src.gnome.org>
Sun, 24 Jan 1999 03:18:36 +0000 (03:18 +0000)
committerRaja R Harinath <harinath@src.gnome.org>
Sun, 24 Jan 1999 03:18:36 +0000 (03:18 +0000)
* gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
Rewrite not to look at `errno' if library call succeeds, since
`errno' is not reset to 0.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gutils.c
gutils.c

index 4afded5..8e3d620 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 4afded5..8e3d620 100644 (file)
@@ -1,3 +1,9 @@
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+       Rewrite not to look at `errno' if library call succeeds, since
+       `errno' is not reset to 0.
+       
 Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
 
        * glibconfig.h.win32: Update the magic values for
index 1a5fad8..36ab275 100644 (file)
@@ -443,29 +443,42 @@ g_get_any_init (void)
 
 #  ifdef HAVE_GETPWUID_R
        struct passwd pwd;
-       guint bufsize = 1; // sizeof (struct passwd);
+       guint bufsize = 1;      /* sizeof (struct passwd); */
        gint error;
 
-       do
-         {
-           g_free (buffer);
-           buffer = g_malloc (bufsize);
-
+      pw_retry:
+       buffer = g_malloc (bufsize);
+       
 #    ifdef HAVE_GETPWUID_R_POSIX
-           error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
-           error = error ? errno : 0;
+       error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
+       if (!error)
+         goto pw_out;
+       /* error = errno;          According to the Solaris man page,
+                                      this is not necessary. */
+           
 #    else /* !HAVE_GETPWUID_R_POSIX */
-           pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
-           error = errno;
+       pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
+       if (pw == NULL)
+         goto pw_out;
+       error = errno;
 #    endif /* !HAVE_GETPWUID_R_POSIX */
 
+       /* If it came here, there's some kind of error.  */
+       g_free (buffer);
+
+       if (error == ERANGE)
+         {
            bufsize *= 2;
+           goto pw_retry;
          }
-       while (error == ERANGE);
-
-       if (error)
-         g_warning ("getpwuid_r(): failed due to: %s", g_strerror (error));
 
+       g_warning ("getpwuid_r(): failed due to: %s", g_strerror (error));
+       /* Make any subsequent g_free (buffer) a no-op.  */
+       buffer = NULL;
+       
+      pw_out:
+       ;
+       
 #  else /* !HAVE_GETPWUID_R */
 
 #    ifdef G_THREADS_ENABLED
index 1a5fad8..36ab275 100644 (file)
--- a/gutils.c
+++ b/gutils.c
@@ -443,29 +443,42 @@ g_get_any_init (void)
 
 #  ifdef HAVE_GETPWUID_R
        struct passwd pwd;
-       guint bufsize = 1; // sizeof (struct passwd);
+       guint bufsize = 1;      /* sizeof (struct passwd); */
        gint error;
 
-       do
-         {
-           g_free (buffer);
-           buffer = g_malloc (bufsize);
-
+      pw_retry:
+       buffer = g_malloc (bufsize);
+       
 #    ifdef HAVE_GETPWUID_R_POSIX
-           error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
-           error = error ? errno : 0;
+       error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
+       if (!error)
+         goto pw_out;
+       /* error = errno;          According to the Solaris man page,
+                                      this is not necessary. */
+           
 #    else /* !HAVE_GETPWUID_R_POSIX */
-           pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
-           error = errno;
+       pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
+       if (pw == NULL)
+         goto pw_out;
+       error = errno;
 #    endif /* !HAVE_GETPWUID_R_POSIX */
 
+       /* If it came here, there's some kind of error.  */
+       g_free (buffer);
+
+       if (error == ERANGE)
+         {
            bufsize *= 2;
+           goto pw_retry;
          }
-       while (error == ERANGE);
-
-       if (error)
-         g_warning ("getpwuid_r(): failed due to: %s", g_strerror (error));
 
+       g_warning ("getpwuid_r(): failed due to: %s", g_strerror (error));
+       /* Make any subsequent g_free (buffer) a no-op.  */
+       buffer = NULL;
+       
+      pw_out:
+       ;
+       
 #  else /* !HAVE_GETPWUID_R */
 
 #    ifdef G_THREADS_ENABLED