]> git.proxmox.com Git - mirror_zfs-debian.git/blame - lib/libspl/getmntany.c
Update control.in for dh-systemd deprecation
[mirror_zfs-debian.git] / lib / libspl / getmntany.c
CommitLineData
a26baf28
BB
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
24 * Copyright 2006 Ricardo Correia. All rights reserved.
25 * Use is subject to license terms.
26 */
27
28/* Copyright (c) 1988 AT&T */
29/* All Rights Reserved */
30
31#include <stdio.h>
32#include <string.h>
33#include <mntent.h>
34#include <sys/mnttab.h>
35
36#include <sys/types.h>
cae5b340 37#include <sys/sysmacros.h>
a26baf28
BB
38#include <sys/stat.h>
39#include <unistd.h>
40
a08ee875 41#define BUFSIZE (MNT_LINE_MAX + 2)
a26baf28
BB
42
43__thread char buf[BUFSIZE];
44
a08ee875
LG
45#define DIFF(xx) ( \
46 (mrefp->xx != NULL) && \
47 (mgetp->xx == NULL || strcmp(mrefp->xx, mgetp->xx) != 0))
a26baf28
BB
48
49int
50getmntany(FILE *fp, struct mnttab *mgetp, struct mnttab *mrefp)
51{
52 int ret;
53
a08ee875
LG
54 while (
55 ((ret = _sol_getmntent(fp, mgetp)) == 0) && (
56 DIFF(mnt_special) || DIFF(mnt_mountp) ||
cae5b340 57 DIFF(mnt_fstype) || DIFF(mnt_mntopts))) { }
a26baf28 58
a08ee875 59 return (ret);
a26baf28
BB
60}
61
62int
63_sol_getmntent(FILE *fp, struct mnttab *mgetp)
64{
65 struct mntent mntbuf;
66 struct mntent *ret;
67
68 ret = getmntent_r(fp, &mntbuf, buf, BUFSIZE);
69
70 if (ret != NULL) {
71 mgetp->mnt_special = mntbuf.mnt_fsname;
72 mgetp->mnt_mountp = mntbuf.mnt_dir;
73 mgetp->mnt_fstype = mntbuf.mnt_type;
74 mgetp->mnt_mntopts = mntbuf.mnt_opts;
a08ee875 75 return (0);
a26baf28
BB
76 }
77
78 if (feof(fp))
a08ee875 79 return (-1);
a26baf28 80
a08ee875 81 return (MNT_TOOLONG);
a26baf28
BB
82}
83
84int
85getextmntent(FILE *fp, struct extmnttab *mp, int len)
86{
87 int ret;
88 struct stat64 st;
89
cae5b340 90 ret = _sol_getmntent(fp, (struct mnttab *)mp);
a26baf28
BB
91 if (ret == 0) {
92 if (stat64(mp->mnt_mountp, &st) != 0) {
93 mp->mnt_major = 0;
94 mp->mnt_minor = 0;
a08ee875 95 return (ret);
a26baf28
BB
96 }
97 mp->mnt_major = major(st.st_dev);
98 mp->mnt_minor = minor(st.st_dev);
99 }
100
a08ee875 101 return (ret);
a26baf28 102}