From 58985f6712d4f869eb68bfe1fee8ca2074cf226f Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 14 Dec 2014 13:28:57 +0000 Subject: chfn: simplify parse_passwd() by using strsep() Signed-off-by: Sami Kerola --- login-utils/chfn.c | 51 +++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 36 deletions(-) (limited to 'login-utils/chfn.c') diff --git a/login-utils/chfn.c b/login-utils/chfn.c index 9833591e8..7ba1a5180 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, ","); } /* -- cgit v1.2.3-55-g7522