Fix uip/whom.c for C89 compatibility
[mmh] / uip / aliasbr.c
index baeab6f..b00f51b 100644 (file)
@@ -11,6 +11,7 @@
 #include <h/utils.h>
 #include <grp.h>
 #include <pwd.h>
+#include <ctype.h>
 
 static int akvis;
 static char *akerrst;
@@ -31,7 +32,7 @@ char *akresult(struct aka *);
 char *akvalue(char *);
 char *akerror(int);
 
-static  char *akval(struct aka *, char *);
+static char *akval(struct aka *, char *);
 static int aleq(char *, char *);
 static char *scanp(unsigned char *);
 static char *getp(char *);
@@ -50,7 +51,7 @@ struct home *seek_home(char *);
 char *
 akvalue(char *s)
 {
-       register char *v;
+       char *v;
 
        akvis = -1;
        v = akval(akahead, s);
@@ -70,18 +71,18 @@ akvisible(void)
 char *
 akresult(struct aka *ak)
 {
-       register char *cp = NULL, *dp, *pp;
-       register struct adr *ad;
+       char *cp = NULL, *dp, *pp;
+       struct adr *ad;
 
        for (ad = ak->ak_addr; ad; ad = ad->ad_next) {
                pp = ad->ad_local ? akval(ak->ak_next, ad->ad_text)
-                       : getcpy(ad->ad_text);
+                       : mh_xstrdup(ad->ad_text);
 
                if (cp) {
                        dp = cp;
                        cp = concat(cp, ",", pp, NULL);
-                       free(dp);
-                       free(pp);
+                       mh_free0(&dp);
+                       mh_free0(&pp);
                } else
                        cp = pp;
        }
@@ -102,14 +103,14 @@ akval(struct aka *ak, char *s)
                if (aleq(s, ak->ak_name))
                        return akresult(ak);
 
-       return getcpy(s);
+       return mh_xstrdup(s);
 }
 
 
 static int
 aleq(char *string, char *aliasent)
 {
-       register char c;
+       char c;
 
        while ((c = *string++))
                if (*aliasent == '*')
@@ -130,10 +131,10 @@ int
 alias(char *file)
 {
        int i;
-       register char *bp, *cp, *pp;
+       char *bp, *cp, *pp;
        char lc, *ap;
-       register struct aka *ak = NULL;
-       register FILE *fp;
+       struct aka *ak = NULL;
+       FILE *fp;
 
        if ((fp = fopen(file, "r")) == NULL) {
                akerrst = file;
@@ -281,7 +282,7 @@ scanp(unsigned char *p)
 static char *
 getp(char *p)
 {
-       register unsigned char  *cp = scanp(p);
+       unsigned char *cp = scanp(p);
 
        p = cp;
        while (!isspace(*cp) && *cp)
@@ -295,7 +296,7 @@ getp(char *p)
 static char *
 seekp(char *p, char *c, char **a)
 {
-       register unsigned char *cp;
+       unsigned char *cp;
 
        p = cp = scanp(p);
        while (!isspace(*cp) && *cp && *cp != ':' && *cp != ';')
@@ -311,9 +312,9 @@ seekp(char *p, char *c, char **a)
 static int
 addfile(struct aka *ak, char *file)
 {
-       register char *cp;
+       char *cp;
        char buffer[BUFSIZ];
-       register FILE *fp;
+       FILE *fp;
 
        if (!(fp = fopen(etcpath(file), "r"))) {
                akerrst = file;
@@ -332,9 +333,9 @@ addfile(struct aka *ak, char *file)
 static int
 addgroup(struct aka *ak, char *grp)
 {
-       register char *gp;
-       register struct group *gr = getgrnam(grp);
-       register struct home *hm = NULL;
+       char *gp;
+       struct group *gr = getgrnam(grp);
+       struct home *hm = NULL;
 
        if (!gr)
                gr = getgrgid(atoi(grp));
@@ -343,28 +344,19 @@ addgroup(struct aka *ak, char *grp)
                return 0;
        }
 
-#ifndef DBMPWD
-       if (homehead == NULL)
-               init_pw();
-#endif /* DBMPWD */
-
        while ((gp = *gr->gr_mem++))
-#ifdef DBMPWD
        {
                struct passwd *pw;
-#endif /* DBMPWD */
                for (hm = homehead; hm; hm = hm->h_next)
                        if (strcmp(hm->h_name, gp)==0) {
                                add_aka(ak, hm->h_name);
                                break;
                        }
-#ifdef DBMPWD
                if ((pw = getpwnam(gp))) {
                        hmalloc(pw);
                        add_aka(ak, gp);
                }
        }
-#endif /* DBMPWD */
 
        return 1;
 }
@@ -374,8 +366,8 @@ static int
 addmember(struct aka *ak, char *grp)
 {
        gid_t gid;
-       register struct group *gr = getgrnam(grp);
-       register struct home *hm = NULL;
+       struct group *gr = getgrnam(grp);
+       struct home *hm = NULL;
 
        if (gr)
                gid = gr->gr_gid;
@@ -388,10 +380,7 @@ addmember(struct aka *ak, char *grp)
                return 0;
        }
 
-#ifndef DBMPWD
-       if (homehead == NULL)
-#endif /* DBMPWD */
-               init_pw();
+       init_pw();
 
        for (hm = homehead; hm; hm = hm->h_next)
                if (hm->h_gid == gid)
@@ -404,7 +393,7 @@ addmember(struct aka *ak, char *grp)
 static char *
 getalias(char *addrs)
 {
-       register unsigned char *pp, *qp;
+       unsigned char *pp, *qp;
        static char *cp = NULL;
 
        if (cp == NULL)
@@ -436,14 +425,14 @@ getalias(char *addrs)
 static void
 add_aka(struct aka *ak, char *pp)
 {
-       register struct adr *ad, *ld;
+       struct adr *ad, *ld;
 
        for (ad = ak->ak_addr, ld = NULL; ad; ld = ad, ad = ad->ad_next)
                if (strcmp(pp, ad->ad_text)==0)
                        return;
 
-       ad = (struct adr *) mh_xmalloc(sizeof(*ad));
-       ad->ad_text = getcpy(pp);
+       ad = mh_xcalloc(1, sizeof(*ad));
+       ad->ad_text = mh_xstrdup(pp);
        ad->ad_local = strchr(pp, '@') == NULL;
        ad->ad_next = NULL;
        if (ak->ak_addr)
@@ -456,39 +445,32 @@ add_aka(struct aka *ak, char *pp)
 void
 init_pw(void)
 {
-       register struct passwd  *pw;
-#ifdef DBMPWD
-       static int init;
+       struct passwd *pw;
+       static int init = 0;
 
        if (!init) {
-               /* if the list has yet to be initialized */
-               /* zap the list, and rebuild from scratch */
-               homehead=NULL;
-               hometail=NULL;
-               init++;
-#endif /* DBMPWD */
-
+               /* read the passwd database and build a list */
                setpwent();
-
-               while ((pw = getpwent()))
-                       if (!hmalloc(pw))
+               while ((pw = getpwent())) {
+                       if (!hmalloc(pw)) {
                                break;
-
+                       }
+               }
                endpwent();
-#ifdef DBMPWD
+
+               init++;  /* now we're initialized */
        }
-#endif /* DBMPWD */
 }
 
 
 static struct aka *
 akalloc(char *id)
 {
-       register struct aka *p;
+       struct aka *p;
 
-       p = (struct aka *) mh_xmalloc(sizeof(*p));
+       p = mh_xcalloc(1, sizeof(*p));
 
-       p->ak_name = getcpy(id);
+       p->ak_name = mh_xstrdup(id);
        p->ak_visible = 0;
        p->ak_addr = NULL;
        p->ak_next = NULL;
@@ -505,15 +487,15 @@ akalloc(char *id)
 static struct home *
 hmalloc(struct passwd *pw)
 {
-       register struct home *p;
+       struct home *p;
 
-       p = (struct home *) mh_xmalloc(sizeof(*p));
+       p = mh_xcalloc(1, sizeof(*p));
 
-       p->h_name = getcpy(pw->pw_name);
+       p->h_name = mh_xstrdup(pw->pw_name);
        p->h_uid = pw->pw_uid;
        p->h_gid = pw->pw_gid;
-       p->h_home = getcpy(pw->pw_dir);
-       p->h_shell = getcpy(pw->pw_shell);
+       p->h_home = mh_xstrdup(pw->pw_dir);
+       p->h_shell = mh_xstrdup(pw->pw_shell);
        p->h_ngrps = 0;
        p->h_next = NULL;
        /* append to end */
@@ -530,28 +512,21 @@ hmalloc(struct passwd *pw)
 struct home *
 seek_home(char *name)
 {
-       register struct home *hp;
-#ifdef DBMPWD
+       struct home *hp;
        struct passwd *pw;
        char lname[32];
        unsigned char *c;
        char *c1;
-#else  /* DBMPWD */
-
-       if (homehead == NULL)
-               init_pw();
-#endif /* DBMPWD */
 
        for (hp = homehead; hp; hp = hp->h_next)
                if (!mh_strcasecmp(name, hp->h_name))
                        return hp;
 
-#ifdef DBMPWD
        /*
        ** The only place where there might be problems.
        ** This assumes that ALL usernames are kept in lowercase.
        */
-       for (c = name, c1 = lname; *c && (c1 - lname < sizeof(lname) - 1);
+       for (c = name, c1 = lname; *c && (c1 - lname < (int)sizeof(lname) - 1);
                        c++, c1++) {
                if (isalpha(*c) && isupper(*c))
                        *c1 = tolower(*c);
@@ -561,7 +536,6 @@ seek_home(char *name)
        *c1 = '\0';
        if ((pw = getpwnam(lname)))
                return(hmalloc(pw));
-#endif /* DBMPWD */
 
        return NULL;
 }