Deleted Added
full compact
zmount.c (302408) zmount.c (324061)
1/*-
2 * Copyright (c) 2006 Pawel Jakub Dawidek <pjd@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * SUCH DAMAGE.
25 */
26
27/*
28 * This file implements Solaris compatible zmount() function.
29 */
30
31#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2006 Pawel Jakub Dawidek <pjd@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * SUCH DAMAGE.
25 */
26
27/*
28 * This file implements Solaris compatible zmount() function.
29 */
30
31#include <sys/cdefs.h>
32__FBSDID("$FreeBSD: stable/11/cddl/compat/opensolaris/misc/zmount.c 221390 2011-05-03 16:00:26Z jh $");
32__FBSDID("$FreeBSD: stable/11/cddl/compat/opensolaris/misc/zmount.c 324061 2017-09-27 15:06:46Z asomers $");
33
34#include <sys/param.h>
35#include <sys/mount.h>
36#include <sys/uio.h>
37#include <sys/mntent.h>
38#include <assert.h>
39#include <stdio.h>
40#include <stdlib.h>

--- 28 unchanged lines hidden (view full) ---

69 *iovlen = ++i;
70}
71
72int
73zmount(const char *spec, const char *dir, int mflag, char *fstype,
74 char *dataptr, int datalen, char *optptr, int optlen)
75{
76 struct iovec *iov;
33
34#include <sys/param.h>
35#include <sys/mount.h>
36#include <sys/uio.h>
37#include <sys/mntent.h>
38#include <assert.h>
39#include <stdio.h>
40#include <stdlib.h>

--- 28 unchanged lines hidden (view full) ---

69 *iovlen = ++i;
70}
71
72int
73zmount(const char *spec, const char *dir, int mflag, char *fstype,
74 char *dataptr, int datalen, char *optptr, int optlen)
75{
76 struct iovec *iov;
77 char *optstr, *os, *p;
77 char *optstr, *os, *p, *tofree;
78 int iovlen, rv;
79
80 assert(spec != NULL);
81 assert(dir != NULL);
82 assert(mflag == 0 || mflag == MS_RDONLY);
83 assert(fstype != NULL);
84 assert(strcmp(fstype, MNTTYPE_ZFS) == 0);
85 assert(dataptr == NULL);
86 assert(datalen == 0);
87 assert(optptr != NULL);
88 assert(optlen > 0);
89
78 int iovlen, rv;
79
80 assert(spec != NULL);
81 assert(dir != NULL);
82 assert(mflag == 0 || mflag == MS_RDONLY);
83 assert(fstype != NULL);
84 assert(strcmp(fstype, MNTTYPE_ZFS) == 0);
85 assert(dataptr == NULL);
86 assert(datalen == 0);
87 assert(optptr != NULL);
88 assert(optlen > 0);
89
90 optstr = strdup(optptr);
90 tofree = optstr = strdup(optptr);
91 assert(optstr != NULL);
92
93 iov = NULL;
94 iovlen = 0;
95 if (mflag & MS_RDONLY)
96 build_iovec(&iov, &iovlen, "ro", NULL, 0);
97 build_iovec(&iov, &iovlen, "fstype", fstype, (size_t)-1);
98 build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, dir),
99 (size_t)-1);
100 build_iovec(&iov, &iovlen, "from", __DECONST(char *, spec), (size_t)-1);
91 assert(optstr != NULL);
92
93 iov = NULL;
94 iovlen = 0;
95 if (mflag & MS_RDONLY)
96 build_iovec(&iov, &iovlen, "ro", NULL, 0);
97 build_iovec(&iov, &iovlen, "fstype", fstype, (size_t)-1);
98 build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, dir),
99 (size_t)-1);
100 build_iovec(&iov, &iovlen, "from", __DECONST(char *, spec), (size_t)-1);
101 for (p = optstr; p != NULL; strsep(&p, ",/ ")) {
102 if (*p != '\0')
103 build_iovec(&iov, &iovlen, p, NULL, (size_t)-1);
104 }
101 while ((p = strsep(&optstr, ",/")) != NULL)
102 build_iovec(&iov, &iovlen, p, NULL, (size_t)-1);
105 rv = nmount(iov, iovlen, 0);
103 rv = nmount(iov, iovlen, 0);
106 free(optstr);
104 free(tofree);
107 return (rv);
108}
105 return (rv);
106}