From 632ed0aa11ff4e8987f274ca00e0ab8f19b00d67 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Sun, 15 Feb 2015 21:20:35 +0000 Subject: [PATCH] create: Replace user lookup with a more efficient implementation --- src/bin/screens/edi_welcome.c | 46 +++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/bin/screens/edi_welcome.c b/src/bin/screens/edi_welcome.c index c64ca78..e62823e 100644 --- a/src/bin/screens/edi_welcome.c +++ b/src/bin/screens/edi_welcome.c @@ -233,27 +233,37 @@ _edi_welcome_project_new_create_cb(void *data EINA_UNUSED, Evas_Object *obj EINA static int _edi_welcome_user_fullname_get(const char *username, char *fullname, size_t max) { - struct passwd *p; - size_t n; + struct passwd *p; + char *pos; + unsigned int n; - if (!username) - return 0; + if (!username) + return -1; - errno = 0; - p = getpwnam(username); - if (p == NULL && errno == 0) - return 0; - if (p == NULL) - return -1; + errno = 0; + p = getpwnam(username); + if (p == NULL || max == 0) + { + if (errno == 0) + return 0; + else + return -1; + } - n = strcspn(p->pw_gecos, ","); - if (max == 0 || n <= 0) - return 0; - if (n > max - 1) - n = max - 1; - memcpy(fullname, p->pw_gecos, n); - fullname[n] = '\0'; - return 1; + pos = strchr(p->pw_gecos, ','); + if (!pos) + n = strlen(p->pw_gecos); + else + n = pos - p->pw_gecos; + + if (n == 0) + return 0; + if (n > max - 1) + n = max - 1; + + memcpy(fullname, p->pw_gecos, n); + fullname[n] = '\0'; + return 1; } static void