Factor Linux specific pieces out of libspl.
Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
Reviewed-by: Sean Eric Fagan <sef@ixsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9336
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
#
# Ignore the prefix for the mount helper. It must be installed in /sbin/
# because this path is hardcoded in the mount(8) for security reasons.
# Unconditionally enable ASSERTs
AM_CPPFLAGS += -DDEBUG -UNDEBUG
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
bin_PROGRAMS = raidz_test
raidz_test_SOURCES = \
# Unconditionally enable debugging for zdb
AM_CPPFLAGS += -DDEBUG -UNDEBUG
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
sbin_PROGRAMS = zdb
zdb_SOURCES = \
-SUBDIRS = zed.d
-
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
+SUBDIRS = zed.d
sbin_PROGRAMS = zed
*/
#include <ctype.h>
-#include <devid.h>
#include <fcntl.h>
#include <libnvpair.h>
#include <libzfs.h>
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
sbin_PROGRAMS = zfs
zfs_SOURCES = \
const char *cmdname = (op == OP_SHARE) ? "unshare" : "unmount";
ino_t path_inode;
- /*
- * Search for the path in /proc/self/mounts. Rather than looking for the
- * specific path, which can be fooled by non-standard paths (i.e. ".."
- * or "//"), we stat() the path and search for the corresponding
- * (major,minor) device pair.
- */
- if (stat64(path, &statbuf) != 0) {
- (void) fprintf(stderr, gettext("cannot %s '%s': %s\n"),
- cmdname, path, strerror(errno));
- return (1);
- }
- path_inode = statbuf.st_ino;
/*
* Search for the given (major,minor) pair in the mount table.
if (freopen(MNTTAB, "r", mnttab_file) == NULL)
return (ENOENT);
- while ((ret = getextmntent(mnttab_file, &entry, 0)) == 0) {
- if (entry.mnt_major == major(statbuf.st_dev) &&
- entry.mnt_minor == minor(statbuf.st_dev))
- break;
- }
- if (ret != 0) {
+ if (getextmntent(path, &entry, &statbuf) != 0) {
if (op == OP_SHARE) {
(void) fprintf(stderr, gettext("cannot %s '%s': not "
"currently mounted\n"), cmdname, path);
strerror(errno));
return (ret != 0);
}
+ path_inode = statbuf.st_ino;
if (strcmp(entry.mnt_fstype, MNTTYPE_ZFS) != 0) {
(void) fprintf(stderr, gettext("cannot %s '%s': not a ZFS "
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
sbin_PROGRAMS = zhack
zhack_SOURCES = \
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
sbin_PROGRAMS = zinject
zinject_SOURCES = \
struct stat64 *statbuf)
{
struct extmnttab mp;
- FILE *fp;
- int match;
const char *rel;
char fullpath[MAXPATHLEN];
return (-1);
}
- if (strlen(fullpath) >= MAXPATHLEN) {
- (void) fprintf(stderr, "invalid object; pathname too long\n");
- return (-1);
- }
-
- if (stat64(fullpath, statbuf) != 0) {
- (void) fprintf(stderr, "cannot open '%s': %s\n",
- fullpath, strerror(errno));
- return (-1);
- }
-
-#ifdef HAVE_SETMNTENT
- if ((fp = setmntent(MNTTAB, "r")) == NULL) {
-#else
- if ((fp = fopen(MNTTAB, "r")) == NULL) {
-#endif
- (void) fprintf(stderr, "cannot open %s\n", MNTTAB);
- return (-1);
- }
-
- match = 0;
- while (getextmntent(fp, &mp, sizeof (mp)) == 0) {
- if (makedev(mp.mnt_major, mp.mnt_minor) == statbuf->st_dev) {
- match = 1;
- break;
- }
- }
-
- if (!match) {
+ if (getextmntent(fullpath, &mp, statbuf) != 0) {
(void) fprintf(stderr, "cannot find mountpoint for '%s'\n",
fullpath);
return (-1);
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include \
- -I.
+DEFAULT_INCLUDES += -I.
sbin_PROGRAMS = zpool
#include <assert.h>
#include <ctype.h>
-#include <devid.h>
#include <errno.h>
#include <fcntl.h>
#include <libintl.h>
#include <assert.h>
#include <ctype.h>
-#include <devid.h>
#include <errno.h>
#include <fcntl.h>
#include <libintl.h>
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
sbin_PROGRAMS = zstreamdump
zstreamdump_SOURCES = \
# Unconditionally enable ASSERTs
AM_CPPFLAGS += -DDEBUG -UNDEBUG
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
sbin_PROGRAMS = ztest
ztest_SOURCES = \
# removed once https://github.com/zfsonlinux/zfs/issues/569 is resolved.
AM_CFLAGS += -fno-stack-protector
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
udev_PROGRAMS = zvol_id
zvol_id_SOURCES = \
# should include these rules and override or extend them as needed.
#
-DEFAULT_INCLUDES = -include ${top_builddir}/zfs_config.h
+DEFAULT_INCLUDES = \
+ -include ${top_builddir}/zfs_config.h \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/module/icp/include \
+ -I$(top_srcdir)/lib/libspl/include
+
+if BUILD_LINUX
+DEFAULT_INCLUDES += \
+ -I$(top_srcdir)/lib/libspl/include/os/linux
+endif
AM_LIBTOOLFLAGS = --silent
lib/libspl/include/Makefile
lib/libspl/include/ia32/Makefile
lib/libspl/include/ia32/sys/Makefile
+ lib/libspl/include/os/Makefile
+ lib/libspl/include/os/linux/Makefile
+ lib/libspl/include/os/linux/sys/Makefile
lib/libspl/include/rpc/Makefile
lib/libspl/include/sys/Makefile
lib/libspl/include/sys/dktp/Makefile
# Includes kernel code, generate warnings for large stack frames
AM_CFLAGS += $(FRAME_LARGER_THAN)
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libavl.la
USER_C =
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libefi.la
USER_C = \
# Includes kernel code, generate warnings for large stack frames
AM_CFLAGS += $(FRAME_LARGER_THAN)
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/module/icp/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libicp.la
if TARGET_ASM_X86_64
# and required CFLAGS for libtirpc
AM_CFLAGS += $(FRAME_LARGER_THAN) $(LIBTIRPC_CFLAGS)
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
lib_LTLIBRARIES = libnvpair.la
USER_C = \
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libshare.la
USER_C = \
SUBDIRS = include $(TARGET_ASM_DIR)
DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/lib/libspl/include
-
AM_CFLAGS += $(LIBTIRPC_CFLAGS)
AM_CCASFLAGS = \
noinst_LTLIBRARIES = libspl.la
USER_C = \
- getexecname.c \
- gethostid.c \
- getmntany.c \
list.c \
mkdirp.c \
page.c \
include/sys/list.h \
include/sys/list_impl.h
+if BUILD_LINUX
+USER_C += \
+ os/linux/getexecname.c \
+ os/linux/gethostid.c \
+ os/linux/getmntany.c
+endif
+
USER_ASM = atomic.S
nodist_libspl_la_SOURCES = \
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/lib/libspl/include
-
atomic_SOURCE = atomic.c
atomic_ASM = atomic.S
-SUBDIRS = ia32 rpc sys util
+SUBDIRS = ia32 rpc sys util os
libspldir = $(includedir)/libspl
libspl_HEADERS = \
$(top_srcdir)/lib/libspl/include/assert.h \
$(top_srcdir)/lib/libspl/include/atomic.h \
- $(top_srcdir)/lib/libspl/include/devid.h \
$(top_srcdir)/lib/libspl/include/libdevinfo.h \
$(top_srcdir)/lib/libspl/include/libgen.h \
$(top_srcdir)/lib/libspl/include/libshare.h \
+++ /dev/null
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _LIBSPL_DEVID_H
-#define _LIBSPL_DEVID_H
-
-#include <sys/types.h>
-
-#endif
--- /dev/null
+if BUILD_LINUX
+SUBDIRS = linux
+endif
--- /dev/null
+SUBDIRS = sys
--- /dev/null
+libspldir = $(includedir)/libspl/sys
+libspl_HEADERS = \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/byteorder.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/file.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/mnttab.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/mount.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/param.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/stat.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/sysmacros.h \
+ $(top_srcdir)/lib/libspl/include/os/linux/sys/uio.h
uint_t mnt_minor;
};
+struct stat64;
+struct statfs;
+
extern int getmntany(FILE *fp, struct mnttab *mp, struct mnttab *mpref);
extern int _sol_getmntent(FILE *fp, struct mnttab *mp);
-extern int getextmntent(FILE *fp, struct extmnttab *mp, int len);
-
+extern int getextmntent(const char *path, struct extmnttab *mp,
+ struct stat64 *statbuf);
static inline char *_sol_hasmntopt(struct mnttab *mnt, char *opt)
{
struct mntent mnt_new;
#ifndef _LIBSPL_SYS_UIO_H
#define _LIBSPL_SYS_UIO_H
+#include <sys/types.h>
#include_next <sys/uio.h>
+#include <stdint.h>
typedef struct iovec iovec_t;
typedef enum uio_rw {
typedef struct uio {
struct iovec *uio_iov; /* pointer to array of iovecs */
int uio_iovcnt; /* number of iovecs */
- offset_t uio_loffset; /* file offset */
+ loff_t uio_loffset; /* file offset */
uio_seg_t uio_segflg; /* address space (kernel or user) */
uint16_t uio_fmode; /* file mode flags */
uint16_t uio_extflg; /* extended flags */
- offset_t uio_limit; /* u-limit (maximum byte offset) */
+ loff_t uio_limit; /* u-limit (maximum byte offset) */
ssize_t uio_resid; /* residual count */
} uio_t;
$(top_srcdir)/lib/libspl/include/sys/acl.h \
$(top_srcdir)/lib/libspl/include/sys/acl_impl.h \
$(top_srcdir)/lib/libspl/include/sys/bitmap.h \
- $(top_srcdir)/lib/libspl/include/sys/byteorder.h \
$(top_srcdir)/lib/libspl/include/sys/callb.h \
$(top_srcdir)/lib/libspl/include/sys/cmn_err.h \
$(top_srcdir)/lib/libspl/include/sys/cred.h \
$(top_srcdir)/lib/libspl/include/sys/dklabel.h \
$(top_srcdir)/lib/libspl/include/sys/errno.h \
$(top_srcdir)/lib/libspl/include/sys/feature_tests.h \
- $(top_srcdir)/lib/libspl/include/sys/file.h \
$(top_srcdir)/lib/libspl/include/sys/int_limits.h \
$(top_srcdir)/lib/libspl/include/sys/int_types.h \
$(top_srcdir)/lib/libspl/include/sys/inttypes.h \
$(top_srcdir)/lib/libspl/include/sys/list_impl.h \
$(top_srcdir)/lib/libspl/include/sys/mhd.h \
$(top_srcdir)/lib/libspl/include/sys/mkdev.h \
- $(top_srcdir)/lib/libspl/include/sys/mnttab.h \
- $(top_srcdir)/lib/libspl/include/sys/mount.h \
- $(top_srcdir)/lib/libspl/include/sys/param.h \
$(top_srcdir)/lib/libspl/include/sys/policy.h \
$(top_srcdir)/lib/libspl/include/sys/poll.h \
$(top_srcdir)/lib/libspl/include/sys/priv.h \
$(top_srcdir)/lib/libspl/include/sys/processor.h \
- $(top_srcdir)/lib/libspl/include/sys/signal.h \
$(top_srcdir)/lib/libspl/include/sys/simd.h \
$(top_srcdir)/lib/libspl/include/sys/stack.h \
- $(top_srcdir)/lib/libspl/include/sys/stat.h \
$(top_srcdir)/lib/libspl/include/sys/stdtypes.h \
$(top_srcdir)/lib/libspl/include/sys/strings.h \
$(top_srcdir)/lib/libspl/include/sys/stropts.h \
$(top_srcdir)/lib/libspl/include/sys/sunddi.h \
- $(top_srcdir)/lib/libspl/include/sys/sysmacros.h \
$(top_srcdir)/lib/libspl/include/sys/systeminfo.h \
$(top_srcdir)/lib/libspl/include/sys/time.h \
$(top_srcdir)/lib/libspl/include/sys/trace_defs.h \
$(top_srcdir)/lib/libspl/include/sys/types32.h \
$(top_srcdir)/lib/libspl/include/sys/types.h \
$(top_srcdir)/lib/libspl/include/sys/tzfile.h \
- $(top_srcdir)/lib/libspl/include/sys/uio.h \
$(top_srcdir)/lib/libspl/include/sys/va_list.h \
$(top_srcdir)/lib/libspl/include/sys/varargs.h \
$(top_srcdir)/lib/libspl/include/sys/vnode.h \
#include <stdio.h>
#include <string.h>
#include <mntent.h>
+#include <sys/errno.h>
#include <sys/mnttab.h>
#include <sys/types.h>
return (MNT_TOOLONG);
}
-int
-getextmntent(FILE *fp, struct extmnttab *mp, int len)
+static int
+getextmntent_impl(FILE *fp, struct extmnttab *mp, int len)
{
int ret;
struct stat64 st;
return (ret);
}
+
+int
+getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf)
+{
+ struct stat64 st;
+ FILE *fp;
+ int match;
+
+ if (strlen(path) >= MAXPATHLEN) {
+ (void) fprintf(stderr, "invalid object; pathname too long\n");
+ return (-1);
+ }
+
+ /*
+ * Search for the path in /proc/self/mounts. Rather than looking for the
+ * specific path, which can be fooled by non-standard paths (i.e. ".."
+ * or "//"), we stat() the path and search for the corresponding
+ * (major,minor) device pair.
+ */
+ if (stat64(path, statbuf) != 0) {
+ (void) fprintf(stderr, "cannot open '%s': %s\n",
+ path, strerror(errno));
+ return (-1);
+ }
+
+
+#ifdef HAVE_SETMNTENT
+ if ((fp = setmntent(MNTTAB, "r")) == NULL) {
+#else
+ if ((fp = fopen(MNTTAB, "r")) == NULL) {
+#endif
+ (void) fprintf(stderr, "cannot open %s\n", MNTTAB);
+ return (-1);
+ }
+
+ /*
+ * Search for the given (major,minor) pair in the mount table.
+ */
+
+ match = 0;
+ while (getextmntent_impl(fp, entry, sizeof (*entry)) == 0) {
+ if (makedev(entry->mnt_major, entry->mnt_minor) ==
+ statbuf->st_dev) {
+ match = 1;
+ break;
+ }
+ }
+
+ if (!match) {
+ (void) fprintf(stderr, "cannot find mountpoint for '%s'\n",
+ path);
+ return (-1);
+ }
+
+ if (stat64(entry->mnt_mountp, &st) != 0) {
+ entry->mnt_major = 0;
+ entry->mnt_minor = 0;
+ return (-1);
+ }
+
+ return (0);
+}
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libtpool.la
USER_C = \
# Includes kernel code, generate warnings for large stack frames
AM_CFLAGS += $(FRAME_LARGER_THAN)
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libunicode.la
USER_C =
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
lib_LTLIBRARIES = libuutil.la
USER_C = \
libzfs_pcdir = $(datarootdir)/pkgconfig
libzfs_pc_DATA = libzfs.pc libzfs_core.pc
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/module/icp/include \
- -I$(top_srcdir)/lib/libspl/include
-
lib_LTLIBRARIES = libzfs.la
USER_C = \
* Copyright (c) 2016, Intel Corporation.
*/
-#include <devid.h>
#include <errno.h>
#include <libintl.h>
#include <libgen.h>
*/
#include <errno.h>
-#include <devid.h>
#include <libintl.h>
#include <stdio.h>
#include <stdlib.h>
return (0);
}
-#if defined(__sun__) || defined(__sun)
-/*
- * Convert from a devid string to a path.
- */
-static char *
-devid_to_path(char *devid_str)
-{
- ddi_devid_t devid;
- char *minor;
- char *path;
- devid_nmlist_t *list = NULL;
- int ret;
-
- if (devid_str_decode(devid_str, &devid, &minor) != 0)
- return (NULL);
-
- ret = devid_deviceid_to_nmlist("/dev", devid, minor, &list);
-
- devid_str_free(minor);
- devid_free(devid);
-
- if (ret != 0)
- return (NULL);
-
- /*
- * In a case the strdup() fails, we will just return NULL below.
- */
- path = strdup(list[0].devname);
-
- devid_free_nmlist(list);
-
- return (path);
-}
-
-/*
- * Convert from a path to a devid string.
- */
-static char *
-path_to_devid(const char *path)
-{
- int fd;
- ddi_devid_t devid;
- char *minor, *ret;
-
- if ((fd = open(path, O_RDONLY)) < 0)
- return (NULL);
-
- minor = NULL;
- ret = NULL;
- if (devid_get(fd, &devid) == 0) {
- if (devid_get_minor_name(fd, &minor) == 0)
- ret = devid_str_encode(devid, minor);
- if (minor != NULL)
- devid_str_free(minor);
- devid_free(devid);
- }
- (void) close(fd);
-
- return (ret);
-}
-
-/*
- * Issue the necessary ioctl() to update the stored path value for the vdev. We
- * ignore any failure here, since a common case is for an unprivileged user to
- * type 'zpool status', and we'll display the correct information anyway.
- */
-static void
-set_path(zpool_handle_t *zhp, nvlist_t *nv, const char *path)
-{
- zfs_cmd_t zc = {"\0"};
-
- (void) strncpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name));
- (void) strncpy(zc.zc_value, path, sizeof (zc.zc_value));
- verify(nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID,
- &zc.zc_guid) == 0);
-
- (void) ioctl(zhp->zpool_hdl->libzfs_fd, ZFS_IOC_VDEV_SETPATH, &zc);
-}
-#endif /* sun */
-
#define PATH_BUF_LEN 64
/*
(void) snprintf(buf, sizeof (buf), "%llu", (u_longlong_t)value);
path = buf;
} else if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0) {
-#if defined(__sun__) || defined(__sun)
- /*
- * Live VDEV path updates to a kernel VDEV during a
- * zpool_vdev_name lookup are not supported on Linux.
- */
- char *devid;
- vdev_stat_t *vs;
- uint_t vsc;
-
- /*
- * If the device is dead (faulted, offline, etc) then don't
- * bother opening it. Otherwise we may be forcing the user to
- * open a misbehaving device, which can have undesirable
- * effects.
- */
- if ((nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
- (uint64_t **)&vs, &vsc) != 0 ||
- vs->vs_state >= VDEV_STATE_DEGRADED) &&
- zhp != NULL &&
- nvlist_lookup_string(nv, ZPOOL_CONFIG_DEVID, &devid) == 0) {
- /*
- * Determine if the current path is correct.
- */
- char *newdevid = path_to_devid(path);
-
- if (newdevid == NULL ||
- strcmp(devid, newdevid) != 0) {
- char *newpath;
-
- if ((newpath = devid_to_path(devid)) != NULL) {
- /*
- * Update the path appropriately.
- */
- set_path(zhp, nv, newpath);
- if (nvlist_add_string(nv,
- ZPOOL_CONFIG_PATH, newpath) == 0)
- verify(nvlist_lookup_string(nv,
- ZPOOL_CONFIG_PATH,
- &path) == 0);
- free(newpath);
- }
- }
-
- if (newdevid)
- devid_str_free(newdevid);
- }
-#endif /* sun */
-
if (name_flags & VDEV_NAME_FOLLOW_LINKS) {
char *rp = realpath(path, NULL);
if (rp) {
{
struct stat64 statbuf;
struct extmnttab entry;
- int ret;
if (path[0] != '/' && strncmp(path, "./", strlen("./")) != 0) {
/*
return (zfs_open(hdl, path, argtype));
}
- if (stat64(path, &statbuf) != 0) {
- (void) fprintf(stderr, "%s: %s\n", path, strerror(errno));
- return (NULL);
- }
-
/* Reopen MNTTAB to prevent reading stale data from open file */
if (freopen(MNTTAB, "r", hdl->libzfs_mnttab) == NULL)
return (NULL);
- while ((ret = getextmntent(hdl->libzfs_mnttab, &entry, 0)) == 0) {
- if (makedevice(entry.mnt_major, entry.mnt_minor) ==
- statbuf.st_dev) {
- break;
- }
- }
- if (ret != 0) {
+ if (getextmntent(path, &entry, &statbuf) != 0)
return (NULL);
- }
if (strcmp(entry.mnt_fstype, MNTTYPE_ZFS) != 0) {
(void) fprintf(stderr, gettext("'%s': not a ZFS filesystem\n"),
include $(top_srcdir)/config/Rules.am
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
lib_LTLIBRARIES = libzfs_core.la
USER_C = \
AM_CFLAGS += -DLIB_ZPOOL_BUILD
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
lib_LTLIBRARIES = libzpool.la
USER_C = \
int dump_fd = -1;
vnode_t *vp;
int old_umask = 0;
- char *realpath;
struct stat64 st;
int err;
- realpath = umem_alloc(MAXPATHLEN, UMEM_NOFAIL);
-
- /*
- * If we're accessing a real disk from userland, we need to use
- * the character interface to avoid caching. This is particularly
- * important if we're trying to look at a real in-kernel storage
- * pool from userland, e.g. via zdb, because otherwise we won't
- * see the changes occurring under the segmap cache.
- * On the other hand, the stupid character device returns zero
- * for its size. So -- gag -- we open the block device to get
- * its size, and remember it for subsequent VOP_GETATTR().
- */
-#if defined(__sun__) || defined(__sun)
- if (strncmp(path, "/dev/", 5) == 0) {
-#else
- if (0) {
-#endif
- char *dsk;
- fd = open64(path, O_RDONLY);
- if (fd == -1) {
- err = errno;
- free(realpath);
- return (err);
- }
- if (fstat64(fd, &st) == -1) {
- err = errno;
- close(fd);
- free(realpath);
- return (err);
- }
- close(fd);
- (void) sprintf(realpath, "%s", path);
- dsk = strstr(path, "/dsk/");
- if (dsk != NULL)
- (void) sprintf(realpath + (dsk - path) + 1, "r%s",
- dsk + 1);
- } else {
- (void) sprintf(realpath, "%s", path);
- if (!(flags & FCREAT) && stat64(realpath, &st) == -1) {
- err = errno;
- free(realpath);
- return (err);
- }
+ if (!(flags & FCREAT) && stat64(path, &st) == -1) {
+ err = errno;
+ return (err);
}
- if (!(flags & FCREAT) && S_ISBLK(st.st_mode)) {
-#ifdef __linux__
+ if (!(flags & FCREAT) && S_ISBLK(st.st_mode))
flags |= O_DIRECT;
-#endif
- }
if (flags & FCREAT)
old_umask = umask(0);
* The construct 'flags - FREAD' conveniently maps combinations of
* FREAD and FWRITE to the corresponding O_RDONLY, O_WRONLY, and O_RDWR.
*/
- fd = open64(realpath, flags - FREAD, mode);
+ fd = open64(path, flags - FREAD, mode);
if (fd == -1) {
err = errno;
- free(realpath);
return (err);
}
if (vn_dumpdir != NULL) {
char *dumppath = umem_zalloc(MAXPATHLEN, UMEM_NOFAIL);
(void) snprintf(dumppath, MAXPATHLEN,
- "%s/%s", vn_dumpdir, basename(realpath));
+ "%s/%s", vn_dumpdir, basename(path));
dump_fd = open64(dumppath, O_CREAT | O_WRONLY, 0666);
umem_free(dumppath, MAXPATHLEN);
if (dump_fd == -1) {
err = errno;
- free(realpath);
close(fd);
return (err);
}
dump_fd = -1;
}
- free(realpath);
-
if (fstat64_blk(fd, &st) == -1) {
err = errno;
close(fd);
# Suppress unused but set variable warnings often due to ASSERTs
AM_CFLAGS += $(NO_UNUSED_BUT_SET_VARIABLE)
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
noinst_LTLIBRARIES = libzutil.la
USER_C = \
*/
#include <ctype.h>
-#include <devid.h>
#include <dirent.h>
#include <errno.h>
#include <libintl.h>
#include <time.h>
#include <stdint.h>
-typedef unsigned char uchar_t;
-typedef long long longlong_t;
-typedef longlong_t offset_t;
-
static unsigned char bigbuffer[BIGBUFFERSIZE];
/*
#include <signal.h>
#include <stdio.h>
#include <string.h>
-#include <sys/types.h>
+#include <sys/stdtypes.h>
#include <unistd.h>
-typedef long long offset_t;
-#define MAXOFFSET_T LLONG_MAX
-
/*
* --------------------------------------------------------------
*
pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/bin
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
pkgexec_PROGRAMS = libzfs_input_check
libzfs_input_check_SOURCES = libzfs_input_check.c
#include <errno.h>
#include <string.h>
-typedef enum boolean { B_FALSE, B_TRUE } boolean_t;
-
static void
usage(char *progname)
{
#include <libintl.h>
#include <errno.h>
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-
-#define BLOCK_SIZE 512 /* bytes */
+#define BLOCKSIZE 512 /* bytes */
#define KILOBYTE 1024
#define MEGABYTE (KILOBYTE * KILOBYTE)
#define GIGABYTE (KILOBYTE * MEGABYTE)
#define FILE_MODE (S_ISVTX + S_IRUSR + S_IWUSR)
-typedef long long offset_t;
-
static void usage(void);
int
break;
case 'b':
case 'B':
- mult = BLOCK_SIZE;
+ mult = BLOCKSIZE;
break;
case 'm':
case 'M':
pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/bin
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
pkgexec_PROGRAMS = nvlist_to_lua
nvlist_to_lua_SOURCES = nvlist_to_lua.c
#include <stdio.h>
#include <sys/note.h>
#include <sys/time.h>
-
-typedef enum boolean { B_FALSE, B_TRUE } boolean_t;
-typedef unsigned long long u_longlong_t;
+#include <sys/stdtypes.h>
/*
* Test messages from:
#include <sys/time.h>
#define _SHA2_IMPL
#include <sys/sha2.h>
+#include <sys/stdtypes.h>
#define NOTE(x)
-typedef enum boolean { B_FALSE, B_TRUE } boolean_t;
-typedef unsigned long long u_longlong_t;
/*
#include <strings.h>
#include <stdio.h>
#include <sys/time.h>
+#include <sys/stdtypes.h>
#define NOTE(x)
-typedef enum boolean { B_FALSE, B_TRUE } boolean_t;
-typedef unsigned long long u_longlong_t;
-
/*
* Skein test suite using values from the Skein V1.3 specification found at:
* http://www.skein-hash.info/sites/default/files/skein1.3.pdf
include $(top_srcdir)/config/Rules.am
-AM_CPPFLAGS += -I$(top_srcdir)/include
-AM_CPPFLAGS += -I$(top_srcdir)/lib/libspl/include
LDADD = $(top_builddir)/lib/libzpool/libzpool.la
AUTOMAKE_OPTIONS = subdir-objects
setup.ksh \
libzfs_input.ksh
-DEFAULT_INCLUDES += \
- -I$(top_srcdir)/include \
- -I$(top_srcdir)/lib/libspl/include
-
many_fds_LDADD = \
$(top_builddir)/lib/libzfs/libzfs.la