+2010-07-16 Gonzalo Paniagua Javier <gonzalo@novell.com>
+
+ * src/gmisc-unix.c: include config.h. Fixes bug #609632.
+ Use getpwuid_r instead of getpwent_r.
+
2010-07-02 Zoltan Varga <vargaz@gmail.com>
* src/glib.h: Define gboolean as int32_t to match mono_bool.
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")
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#include <config.h>
#include <stdlib.h>
#include <glib.h>
#include <pthread.h>
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;
}