From: Sami Kerola Date: Sun, 14 Dec 2014 13:28:57 +0000 (+0000) Subject: chfn: simplify parse_passwd() by using strsep() X-Git-Tag: v2.26-rc1~112^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58985f6712d4f869eb68bfe1fee8ca2074cf226f;p=thirdparty%2Futil-linux.git chfn: simplify parse_passwd() by using strsep() Signed-off-by: Sami Kerola --- diff --git a/login-utils/chfn.c b/login-utils/chfn.c index 9833591e87..7ba1a51806 100644 --- a/login-utils/chfn.c +++ b/login-utils/chfn.c @@ -191,42 +191,21 @@ static int parse_argv(int argc, char *argv[], struct finfo *pinfo) static void parse_passwd(struct passwd *pw, struct finfo *pinfo) { char *gecos; - char *cp; - - if (pw) { - pinfo->pw = pw; - pinfo->username = pw->pw_name; - /* use pw_gecos - we take a copy since PAM destroys the original */ - gecos = xstrdup(pw->pw_gecos); - cp = (gecos ? gecos : ""); - pinfo->full_name = cp; - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->office = cp; - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->office_phone = cp; - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->home_phone = cp; - /* extra fields contain site-specific information, and can - * not be changed by this version of chfn. */ - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->other = cp; - } + + if (!pw) + return; + pinfo->pw = pw; + pinfo->username = pw->pw_name; + /* use pw_gecos - we take a copy since PAM destroys the original */ + gecos = xstrdup(pw->pw_gecos); + /* extract known fields */ + pinfo->full_name = strsep(&gecos, ","); + pinfo->office = strsep(&gecos, ","); + pinfo->office_phone = strsep(&gecos, ","); + pinfo->home_phone = strsep(&gecos, ","); + /* extra fields contain site-specific information, and can + * not be changed by this version of chfn. */ + pinfo->other = strsep(&gecos, ","); } /*