aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/mountd
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2017-10-04 08:48:05 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2017-10-04 08:48:05 +0000
commit1da3e8b0973816534e87461be1942eed7b18b3fa (patch)
tree2e4bf2e7439f6c19c4374b6caa8e1acd39cd3d1f /usr.sbin/mountd
parentc9ac0f714c9e1f03c28c30c7431f096f6b0d69ab (diff)
downloadsrc-1da3e8b0973816534e87461be1942eed7b18b3fa.tar.gz
src-1da3e8b0973816534e87461be1942eed7b18b3fa.zip
mountd: Convert mountlist to SLIST
Use SLIST from sys/queue.h instead of homebrew linked list for mountlist. Reviewed by: bapt, rmacklem MFC after: 1 week Sponsored by: Gandi.net Differential Revision: https://reviews.freebsd.org/D12504
Notes
Notes: svn path=/head/; revision=324258
Diffstat (limited to 'usr.sbin/mountd')
-rw-r--r--usr.sbin/mountd/mountd.c49
1 files changed, 16 insertions, 33 deletions
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c
index 1501f5c7c3f1..4431f881581b 100644
--- a/usr.sbin/mountd/mountd.c
+++ b/usr.sbin/mountd/mountd.c
@@ -92,9 +92,10 @@ __FBSDID("$FreeBSD$");
* Structures for keeping the mount list and export list
*/
struct mountlist {
- struct mountlist *ml_next;
char ml_host[MNTNAMLEN+1];
char ml_dirp[MNTPATHLEN+1];
+
+ SLIST_ENTRY(mountlist) next;
};
struct dirlist {
@@ -225,7 +226,7 @@ static int xdr_mlist(XDR *, caddr_t);
static void terminate(int);
static SLIST_HEAD(, exportlist) exphead = SLIST_HEAD_INITIALIZER(exphead);
-static struct mountlist *mlhead;
+static SLIST_HEAD(, mountlist) mlhead = SLIST_HEAD_INITIALIZER(mlhead);
static struct grouplist *grphead;
static char *exnames_default[2] = { _PATH_EXPORTS, NULL };
static char **exnames;
@@ -447,7 +448,6 @@ main(int argc, char **argv)
argc -= optind;
argv += optind;
grphead = (struct grouplist *)NULL;
- mlhead = (struct mountlist *)NULL;
if (argc > 0)
exnames = argv;
else
@@ -1254,8 +1254,7 @@ xdr_mlist(XDR *xdrsp, caddr_t cp __unused)
int false = 0;
char *strp;
- mlp = mlhead;
- while (mlp) {
+ SLIST_FOREACH(mlp, &mlhead, next) {
if (!xdr_bool(xdrsp, &true))
return (0);
strp = &mlp->ml_host[0];
@@ -1264,7 +1263,6 @@ xdr_mlist(XDR *xdrsp, caddr_t cp __unused)
strp = &mlp->ml_dirp[0];
if (!xdr_string(xdrsp, &strp, MNTPATHLEN))
return (0);
- mlp = mlp->ml_next;
}
if (!xdr_bool(xdrsp, &false))
return (0);
@@ -2946,7 +2944,7 @@ parsecred(char *namelist, struct xucred *cr)
static void
get_mountlist(void)
{
- struct mountlist *mlp, **mlpp;
+ struct mountlist *mlp;
char *host, *dirp, *cp;
char str[STRSIZ];
FILE *mlfile;
@@ -2959,7 +2957,6 @@ get_mountlist(void)
return;
}
}
- mlpp = &mlhead;
while (fgets(str, STRSIZ, mlfile) != NULL) {
cp = str;
host = strsep(&cp, " \t\n");
@@ -2973,9 +2970,8 @@ get_mountlist(void)
mlp->ml_host[MNTNAMLEN] = '\0';
strncpy(mlp->ml_dirp, dirp, MNTPATHLEN);
mlp->ml_dirp[MNTPATHLEN] = '\0';
- mlp->ml_next = (struct mountlist *)NULL;
- *mlpp = mlp;
- mlpp = &mlp->ml_next;
+
+ SLIST_INSERT_HEAD(&mlhead, mlp, next);
}
fclose(mlfile);
}
@@ -2983,23 +2979,16 @@ get_mountlist(void)
static void
del_mlist(char *hostp, char *dirp)
{
- struct mountlist *mlp, **mlpp;
- struct mountlist *mlp2;
+ struct mountlist *mlp, *mlp2;
FILE *mlfile;
int fnd = 0;
- mlpp = &mlhead;
- mlp = mlhead;
- while (mlp) {
+ SLIST_FOREACH_SAFE(mlp, &mlhead, next, mlp2) {
if (!strcmp(mlp->ml_host, hostp) &&
(!dirp || !strcmp(mlp->ml_dirp, dirp))) {
fnd = 1;
- mlp2 = mlp;
- *mlpp = mlp = mlp->ml_next;
- free((caddr_t)mlp2);
- } else {
- mlpp = &mlp->ml_next;
- mlp = mlp->ml_next;
+ SLIST_REMOVE(&mlhead, mlp, mountlist, next);
+ free((caddr_t)mlp);
}
}
if (fnd) {
@@ -3007,10 +2996,8 @@ del_mlist(char *hostp, char *dirp)
syslog(LOG_ERR,"can't update %s", _PATH_RMOUNTLIST);
return;
}
- mlp = mlhead;
- while (mlp) {
+ SLIST_FOREACH(mlp, &mlhead, next) {
fprintf(mlfile, "%s %s\n", mlp->ml_host, mlp->ml_dirp);
- mlp = mlp->ml_next;
}
fclose(mlfile);
}
@@ -3019,17 +3006,14 @@ del_mlist(char *hostp, char *dirp)
static void
add_mlist(char *hostp, char *dirp)
{
- struct mountlist *mlp, **mlpp;
+ struct mountlist *mlp;
FILE *mlfile;
- mlpp = &mlhead;
- mlp = mlhead;
- while (mlp) {
+ SLIST_FOREACH(mlp, &mlhead, next) {
if (!strcmp(mlp->ml_host, hostp) && !strcmp(mlp->ml_dirp, dirp))
return;
- mlpp = &mlp->ml_next;
- mlp = mlp->ml_next;
}
+
mlp = (struct mountlist *)malloc(sizeof (*mlp));
if (mlp == (struct mountlist *)NULL)
out_of_mem();
@@ -3037,8 +3021,7 @@ add_mlist(char *hostp, char *dirp)
mlp->ml_host[MNTNAMLEN] = '\0';
strncpy(mlp->ml_dirp, dirp, MNTPATHLEN);
mlp->ml_dirp[MNTPATHLEN] = '\0';
- mlp->ml_next = (struct mountlist *)NULL;
- *mlpp = mlp;
+ SLIST_INSERT_HEAD(&mlhead, mlp, next);
if ((mlfile = fopen(_PATH_RMOUNTLIST, "a")) == NULL) {
syslog(LOG_ERR, "can't update %s", _PATH_RMOUNTLIST);
return;