]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/idmapd/idmapd.c
Fix more 'prototype' warnings and other warnings.
[nfs-utils.git] / utils / idmapd / idmapd.c
index 19bf7a601b5ba562258420facc9fec2083047d5e..a82cd0bf3bcbb36c27cee765822917d629cbaa73 100644 (file)
@@ -137,15 +137,16 @@ static void imconv(struct idmap_client *, struct idmap_msg *);
 static void idtonameres(struct idmap_msg *);
 static void nametoidres(struct idmap_msg *);
 
-static int nfsdopen();
+static int nfsdopen(void);
 static int nfsdopenone(struct idmap_client *);
 static void nfsdreopen(void);
 
 size_t  strlcat(char *, const char *, size_t);
 size_t  strlcpy(char *, const char *, size_t);
-ssize_t atomicio(ssize_t (*)(), int, void *, size_t);
+ssize_t atomicio(ssize_t (*f) (int, void*, size_t),
+                int, void *, size_t);
 void    mydaemon(int, int);
-void    release_parent();
+void    release_parent(void);
 
 static int verbose = 0;
 #define DEFAULT_IDMAP_CACHE_EXPIRY 600 /* seconds */
@@ -444,7 +445,7 @@ dirscancb(int fd, short which, void *data)
 {
        int nent, i;
        struct dirent **ents;
-       struct idmap_client *ic;
+       struct idmap_client *ic, *nextic;
        char path[PATH_MAX];
        struct idmap_clientq *icq = data;
 
@@ -464,7 +465,7 @@ dirscancb(int fd, short which, void *data)
                                goto next;
 
                        if ((ic = calloc(1, sizeof(*ic))) == NULL)
-                               return;
+                               goto out;
                        strlcpy(ic->ic_clid, ents[i]->d_name + 4,
                            sizeof(ic->ic_clid));
                        path[0] = '\0';
@@ -474,7 +475,7 @@ dirscancb(int fd, short which, void *data)
                        if ((ic->ic_dirfd = open(path, O_RDONLY, 0)) == -1) {
                                idmapd_warn("dirscancb: open(%s)", path);
                                free(ic);
-                               return;
+                               goto out;
                        }
 
                        strlcat(path, "/idmap", sizeof(path));
@@ -486,7 +487,7 @@ dirscancb(int fd, short which, void *data)
                        if (nfsopen(ic) == -1) {
                                close(ic->ic_dirfd);
                                free(ic);
-                               return;
+                               goto out;
                        }
 
                        ic->ic_id = "Client";
@@ -498,7 +499,9 @@ dirscancb(int fd, short which, void *data)
                }
        }
 
-       TAILQ_FOREACH(ic, icq, ic_next) {
+       ic = TAILQ_FIRST(icq);
+       while(ic != NULL) {
+               nextic=TAILQ_NEXT(ic, ic_next);
                if (!ic->ic_scanned) {
                        event_del(&ic->ic_event);
                        close(ic->ic_fd);
@@ -511,7 +514,13 @@ dirscancb(int fd, short which, void *data)
                        free(ic);
                } else
                        ic->ic_scanned = 0;
+               ic = nextic;
        }
+
+out:
+       for (i = 0;  i < nent; i++)
+               free(ents[i]);
+       free(ents);
        return;
 }
 
@@ -669,7 +678,7 @@ nfsdcb(int fd, short which, void *data)
 
        bsiz = sizeof(buf) - bsiz;
 
-       if (atomicio(write, ic->ic_fd, buf, bsiz) != bsiz)
+       if (atomicio((void*)write, ic->ic_fd, buf, bsiz) != bsiz)
                idmapd_warnx("nfsdcb: write(%s) failed: errno %d (%s)",
                             ic->ic_path, errno, strerror(errno));
 
@@ -735,7 +744,7 @@ nfscb(int fd, short which, void *data)
        if (im.im_status == IDMAP_STATUS_LOOKUPFAIL)
                im.im_status = IDMAP_STATUS_SUCCESS;
 
-       if (atomicio(write, ic->ic_fd, &im, sizeof(im)) != sizeof(im))
+       if (atomicio((void*)write, ic->ic_fd, &im, sizeof(im)) != sizeof(im))
                idmapd_warn("nfscb: write(%s)", ic->ic_path);
 out:
        event_add(&ic->ic_event, NULL);
@@ -773,7 +782,7 @@ nfsdreopen()
 }
 
 static int
-nfsdopen()
+nfsdopen(void)
 {
        return ((nfsdopenone(&nfsd_ic[IC_NAMEID]) == 0 &&
                    nfsdopenone(&nfsd_ic[IC_IDNAME]) == 0) ? 0 : -1);
@@ -1038,7 +1047,7 @@ mydaemon(int nochdir, int noclose)
        return;
 }
 void
-release_parent()
+release_parent(void)
 {
        int status;