From db34826ca2bf1302c460cdab36f2e7e392247a99 Mon Sep 17 00:00:00 2001 From: Gonzalo Paniagua Javier Date: Fri, 16 Jul 2010 18:32:53 +0000 Subject: [PATCH] 2010-07-16 Gonzalo Paniagua Javier * src/gmisc-unix.c: include config.h. Fixes bug #609632. Use getpwuid_r instead of getpwent_r. svn path=/trunk/mono/; revision=160501 --- eglib/ChangeLog | 5 +++++ eglib/configure.ac | 2 +- eglib/src/gmisc-unix.c | 24 ++++++++---------------- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/eglib/ChangeLog b/eglib/ChangeLog index 1ae1f13e6b3..5a0009926a0 100644 --- a/eglib/ChangeLog +++ b/eglib/ChangeLog @@ -1,3 +1,8 @@ +2010-07-16 Gonzalo Paniagua Javier + + * src/gmisc-unix.c: include config.h. Fixes bug #609632. + Use getpwuid_r instead of getpwent_r. + 2010-07-02 Zoltan Varga * src/glib.h: Define gboolean as int32_t to match mono_bool. diff --git a/eglib/configure.ac b/eglib/configure.ac index 6e10e94759e..2447c5a9c91 100644 --- a/eglib/configure.ac +++ b/eglib/configure.ac @@ -72,7 +72,7 @@ AM_CONDITIONAL(TARGET_WIN32, test x$OS = xWIN32) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(void *) -AC_CHECK_FUNCS(strndup strlcpy getpwent_r strtok_r rewinddir vasprintf) +AC_CHECK_FUNCS(strndup strlcpy getpwuid_r strtok_r rewinddir vasprintf) AM_CONDITIONAL(NEED_VASPRINTF, test x$have_vasprintf = x ) AC_CHECK_LIB(iconv, iconv_open, LIBS="$LIBS -liconv") AC_CHECK_LIB(iconv, libiconv_open, LIBS="$LIBS -liconv") diff --git a/eglib/src/gmisc-unix.c b/eglib/src/gmisc-unix.c index 26c20a8983c..5d8cd2a739f 100644 --- a/eglib/src/gmisc-unix.c +++ b/eglib/src/gmisc-unix.c @@ -26,6 +26,7 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include #include #include @@ -81,27 +82,18 @@ g_get_home_dir (void) if (home_dir == NULL){ pthread_mutex_lock (&home_lock); if (home_dir == NULL){ -#ifdef HAVE_GETPWENT_R - struct passwd pwbuf, *track; +#ifdef HAVE_GETPWUID_R + struct passwd pw; + struct passwd *result; char buf [4096]; - uid_t uid; - - uid = getuid (); - - setpwent (); - - while (getpwent_r (&pwbuf, buf, sizeof (buf), &track) == 0){ - if (pwbuf.pw_uid == uid){ - home_dir = g_strdup (pwbuf.pw_dir); - break; - } - } - endpwent (); + + if (getpwuid_r (getuid (), &pw, buf, 4096, &result) == 0) + home_dir = g_strdup (pw.pw_dir); #endif if (home_dir == NULL) home_dir = g_getenv ("HOME"); - pthread_mutex_unlock (&home_lock); } + pthread_mutex_unlock (&home_lock); } return home_dir; } -- 2.25.1