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} |