Mercurial > gnulib
annotate lib/mountlist.c @ 3618:72422d1e9181
Include unlocked-io.h.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sat, 17 Nov 2001 13:29:42 +0000 |
parents | b0747d75bd4a |
children | 56f442359b0d |
rev | line source |
---|---|
5 | 1 /* mountlist.c -- return a list of mounted filesystems |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
2 Copyright (C) 1991, 1992, 1997-2001 Free Software Foundation, Inc. |
5 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
650
b4ef1c1a0171
update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents:
619
diff
changeset
|
15 along with this program; if not, write to the Free Software Foundation, |
b4ef1c1a0171
update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents:
619
diff
changeset
|
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
5 | 17 |
1278
9ad625a30b7d
Use #if, not #ifdef with HAVE_ macros
Jim Meyering <jim@meyering.net>
parents:
1183
diff
changeset
|
18 #if HAVE_CONFIG_H |
917 | 19 # include <config.h> |
326 | 20 #endif |
21 | |
5 | 22 #include <stdio.h> |
23 #include <sys/types.h> | |
24 #include "mountlist.h" | |
3618 | 25 #include "unlocked-io.h" |
5 | 26 |
27 #ifdef STDC_HEADERS | |
917 | 28 # include <stdlib.h> |
5 | 29 #else |
30 void free (); | |
31 #endif | |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
32 #if defined STDC_HEADERS || defined HAVE_STRING_H |
917 | 33 # include <string.h> |
5 | 34 #else |
917 | 35 # include <strings.h> |
5 | 36 #endif |
37 | |
1183
ebbcc79d5bef
Declare stpcpy only if not defined as macro.
Jim Meyering <jim@meyering.net>
parents:
928
diff
changeset
|
38 #ifndef strstr |
5 | 39 char *strstr (); |
1183
ebbcc79d5bef
Declare stpcpy only if not defined as macro.
Jim Meyering <jim@meyering.net>
parents:
928
diff
changeset
|
40 #endif |
5 | 41 char *xmalloc (); |
42 char *xrealloc (); | |
43 char *xstrdup (); | |
44 | |
1399
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
45 #include <errno.h> |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
46 #ifndef errno |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
47 extern int errno; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
48 #endif |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
49 |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
50 #ifdef HAVE_FCNTL_H |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
51 # include <fcntl.h> |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
52 #endif |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
53 |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
54 #ifdef HAVE_UNISTD_H |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
55 # include <unistd.h> |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
56 #endif |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
57 |
1278
9ad625a30b7d
Use #if, not #ifdef with HAVE_ macros
Jim Meyering <jim@meyering.net>
parents:
1183
diff
changeset
|
58 #if HAVE_SYS_PARAM_H |
917 | 59 # include <sys/param.h> |
326 | 60 #endif |
61 | |
3537 | 62 #if defined MOUNTED_GETFSSTAT /* OSF_1 and Darwin1.3.x */ |
63 # if HAVE_SYS_UCRED_H | |
64 # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */ | |
65 # endif | |
66 # if HAVE_SYS_MOUNT_H | |
67 # include <sys/mount.h> | |
68 # endif | |
69 # if HAVE_SYS_FS_TYPES_H | |
70 # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */ | |
71 # endif | |
72 # if HAVE_STRUCT_FSSTAT_F_FSTYPENAME | |
73 # define FS_TYPE(Ent) ((Ent).f_fstypename) | |
74 # else | |
75 # define FS_TYPE(Ent) mnt_names[(Ent).f_type] | |
76 # endif | |
326 | 77 #endif /* MOUNTED_GETFSSTAT */ |
78 | |
5 | 79 #ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ |
917 | 80 # include <mntent.h> |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
81 # if !defined MOUNTED |
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
82 # if defined _PATH_MOUNTED /* GNU libc */ |
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
83 # define MOUNTED _PATH_MOUNTED |
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
84 # endif |
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
85 # if defined MNT_MNTTAB /* HP-UX. */ |
917 | 86 # define MOUNTED MNT_MNTTAB |
5 | 87 # endif |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
88 # if defined MNTTABNAME /* Dynix. */ |
917 | 89 # define MOUNTED MNTTABNAME |
5 | 90 # endif |
917 | 91 # endif |
5 | 92 #endif |
93 | |
94 #ifdef MOUNTED_GETMNTINFO /* 4.4BSD. */ | |
917 | 95 # include <sys/mount.h> |
5 | 96 #endif |
97 | |
98 #ifdef MOUNTED_GETMNT /* Ultrix. */ | |
917 | 99 # include <sys/mount.h> |
100 # include <sys/fs_types.h> | |
5 | 101 #endif |
102 | |
2677
a15fc2b3bc82
Use MOUNTED_FS_STAT_DEV instead of MOUNTED_NEXT_DEV,
Jim Meyering <jim@meyering.net>
parents:
2667
diff
changeset
|
103 #ifdef MOUNTED_FS_STAT_DEV /* BeOS. */ |
2453
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
104 # include <fs_info.h> |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
105 # include <dirent.h> |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
106 #endif |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
107 |
5 | 108 #ifdef MOUNTED_FREAD /* SVR2. */ |
917 | 109 # include <mnttab.h> |
5 | 110 #endif |
111 | |
112 #ifdef MOUNTED_FREAD_FSTYP /* SVR3. */ | |
917 | 113 # include <mnttab.h> |
114 # include <sys/fstyp.h> | |
115 # include <sys/statfs.h> | |
5 | 116 #endif |
117 | |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
118 #ifdef MOUNTED_LISTMNTENT |
917 | 119 # include <mntent.h> |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
120 #endif |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
121 |
5 | 122 #ifdef MOUNTED_GETMNTENT2 /* SVR4. */ |
917 | 123 # include <sys/mnttab.h> |
5 | 124 #endif |
125 | |
126 #ifdef MOUNTED_VMOUNT /* AIX. */ | |
917 | 127 # include <fshelp.h> |
128 # include <sys/vfs.h> | |
5 | 129 #endif |
130 | |
326 | 131 #ifdef DOLPHIN |
132 /* So special that it's not worth putting this in autoconf. */ | |
917 | 133 # undef MOUNTED_FREAD_FSTYP |
134 # define MOUNTED_GETMNTTBL | |
326 | 135 #endif |
136 | |
1278
9ad625a30b7d
Use #if, not #ifdef with HAVE_ macros
Jim Meyering <jim@meyering.net>
parents:
1183
diff
changeset
|
137 #if HAVE_SYS_MNTENT_H |
918
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
138 /* This is to get MNTOPT_IGNORE on e.g. SVR4. */ |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
139 # include <sys/mntent.h> |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
140 #endif |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
141 |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
142 #if defined MNTOPT_IGNORE && defined HAVE_HASMNTOPT |
918
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
143 # define MNT_IGNORE(M) hasmntopt ((M), MNTOPT_IGNORE) |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
144 #else |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
145 # define MNT_IGNORE(M) 0 |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
146 #endif |
09fe18b51677
(read_filesystem_list): Show automount-related
Jim Meyering <jim@meyering.net>
parents:
917
diff
changeset
|
147 |
5 | 148 #ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ |
149 /* Return the value of the hexadecimal number represented by CP. | |
150 No prefix (like '0x') or suffix (like 'h') is expected to be | |
151 part of CP. */ | |
1446 | 152 /* FIXME: this can overflow */ |
5 | 153 |
154 static int | |
1446 | 155 xatoi (char *cp) |
5 | 156 { |
157 int val; | |
326 | 158 |
5 | 159 val = 0; |
160 while (*cp) | |
161 { | |
162 if (*cp >= 'a' && *cp <= 'f') | |
163 val = val * 16 + *cp - 'a' + 10; | |
164 else if (*cp >= 'A' && *cp <= 'F') | |
165 val = val * 16 + *cp - 'A' + 10; | |
166 else if (*cp >= '0' && *cp <= '9') | |
167 val = val * 16 + *cp - '0'; | |
168 else | |
169 break; | |
170 cp++; | |
171 } | |
172 return val; | |
173 } | |
174 #endif /* MOUNTED_GETMNTENT1. */ | |
175 | |
1389
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
176 #if MOUNTED_GETMNTINFO |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
177 |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
178 # if ! HAVE_F_FSTYPENAME_IN_STATFS |
5 | 179 static char * |
1389
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
180 fstype_to_string (short t) |
5 | 181 { |
182 switch (t) | |
183 { | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
184 # ifdef MOUNT_PC |
5 | 185 case MOUNT_PC: |
186 return "pc"; | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
187 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
188 # ifdef MOUNT_MFS |
5 | 189 case MOUNT_MFS: |
190 return "mfs"; | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
191 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
192 # ifdef MOUNT_LO |
5 | 193 case MOUNT_LO: |
194 return "lo"; | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
195 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
196 # ifdef MOUNT_TFS |
5 | 197 case MOUNT_TFS: |
198 return "tfs"; | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
199 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
200 # ifdef MOUNT_TMP |
5 | 201 case MOUNT_TMP: |
202 return "tmp"; | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
203 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
204 # ifdef MOUNT_UFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
205 case MOUNT_UFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
206 return "ufs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
207 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
208 # ifdef MOUNT_NFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
209 case MOUNT_NFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
210 return "nfs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
211 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
212 # ifdef MOUNT_MSDOS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
213 case MOUNT_MSDOS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
214 return "msdos" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
215 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
216 # ifdef MOUNT_LFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
217 case MOUNT_LFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
218 return "lfs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
219 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
220 # ifdef MOUNT_LOFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
221 case MOUNT_LOFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
222 return "lofs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
223 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
224 # ifdef MOUNT_FDESC |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
225 case MOUNT_FDESC: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
226 return "fdesc" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
227 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
228 # ifdef MOUNT_PORTAL |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
229 case MOUNT_PORTAL: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
230 return "portal" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
231 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
232 # ifdef MOUNT_NULL |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
233 case MOUNT_NULL: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
234 return "null" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
235 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
236 # ifdef MOUNT_UMAP |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
237 case MOUNT_UMAP: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
238 return "umap" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
239 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
240 # ifdef MOUNT_KERNFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
241 case MOUNT_KERNFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
242 return "kernfs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
243 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
244 # ifdef MOUNT_PROCFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
245 case MOUNT_PROCFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
246 return "procfs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
247 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
248 # ifdef MOUNT_AFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
249 case MOUNT_AFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
250 return "afs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
251 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
252 # ifdef MOUNT_CD9660 |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
253 case MOUNT_CD9660: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
254 return "cd9660" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
255 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
256 # ifdef MOUNT_UNION |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
257 case MOUNT_UNION: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
258 return "union" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
259 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
260 # ifdef MOUNT_DEVFS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
261 case MOUNT_DEVFS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
262 return "devfs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
263 # endif |
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
264 # ifdef MOUNT_EXT2FS |
736
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
265 case MOUNT_EXT2FS: |
bf298c166b8d
(fstype_to_string): Handle fstypes of freebsd.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
266 return "ext2fs" ; |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
267 # endif |
5 | 268 default: |
269 return "?"; | |
270 } | |
271 } | |
1396
f3912c1d7674
(fstype_to_string): Guard with #if ! HAVE_F_FSTYPENAME_IN_STATFS.
Jim Meyering <jim@meyering.net>
parents:
1389
diff
changeset
|
272 # endif /* ! HAVE_F_FSTYPENAME_IN_STATFS */ |
1389
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
273 |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
274 /* __NetBSD__ || BSD_NET2 || __OpenBSD__ */ |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
275 static char * |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
276 fsp_to_string (const struct statfs *fsp) |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
277 { |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
278 # if defined HAVE_F_FSTYPENAME_IN_STATFS |
2667
a61942f1a535
(fsp_to_string) [HAVE_F_FSTYPENAME_IN_STATFS]:
Jim Meyering <jim@meyering.net>
parents:
2570
diff
changeset
|
279 return (char *) (fsp->f_fstypename); |
1389
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
280 # else |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
281 return fstype_to_string (fsp->f_type); |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
282 # endif |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
283 } |
e947a465b033
(fsp_to_string): Clean out some crufty #ifdefs
Jim Meyering <jim@meyering.net>
parents:
1278
diff
changeset
|
284 |
5 | 285 #endif /* MOUNTED_GETMNTINFO */ |
286 | |
287 #ifdef MOUNTED_VMOUNT /* AIX. */ | |
288 static char * | |
1446 | 289 fstype_to_string (int t) |
5 | 290 { |
291 struct vfs_ent *e; | |
292 | |
293 e = getvfsbytype (t); | |
294 if (!e || !e->vfsent_name) | |
295 return "none"; | |
296 else | |
297 return e->vfsent_name; | |
298 } | |
299 #endif /* MOUNTED_VMOUNT */ | |
300 | |
301 /* Return a list of the currently mounted filesystems, or NULL on error. | |
302 Add each entry to the tail of the list so that they stay in order. | |
303 If NEED_FS_TYPE is nonzero, ensure that the filesystem type fields in | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
304 the returned list are valid. Otherwise, they might not be. */ |
5 | 305 |
306 struct mount_entry * | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
307 read_filesystem_list (int need_fs_type) |
5 | 308 { |
309 struct mount_entry *mount_list; | |
310 struct mount_entry *me; | |
1413 | 311 struct mount_entry **mtail = &mount_list; |
5 | 312 |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
313 #ifdef MOUNTED_LISTMNTENT |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
314 { |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
315 struct tabmntent *mntlist, *p; |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
316 struct mntent *mnt; |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
317 struct mount_entry *me; |
876 | 318 |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
319 /* the third and fourth arguments could be used to filter mounts, |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
320 but Crays doesn't seem to have any mounts that we want to |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
321 remove. Specifically, automount create normal NFS mounts. |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
322 */ |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
323 |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
324 if(listmntent(&mntlist, KMTAB, NULL, NULL) < 0) |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
325 return NULL; |
1443
13bcee72981f
(read_filesystem_list): If all_fs is negative, omit non-local filesytems.
Jim Meyering <jim@meyering.net>
parents:
1436
diff
changeset
|
326 for (p = mntlist; p; p = p->next) { |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
327 mnt = p->ment; |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
328 me = (struct mount_entry*) xmalloc(sizeof (struct mount_entry)); |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
329 me->me_devname = xstrdup(mnt->mnt_fsname); |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
330 me->me_mountdir = xstrdup(mnt->mnt_dir); |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
331 me->me_type = xstrdup(mnt->mnt_type); |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
332 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
333 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
334 me->me_dev = -1; |
1413 | 335 *mtail = me; |
336 mtail = &me->me_next; | |
619
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
337 } |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
338 freemntlist(mntlist); |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
339 } |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
340 #endif |
dbaeca6a1983
(read_filesystem_list) [MOUNTED_LISTMNTENT]: New function.
Jim Meyering <jim@meyering.net>
parents:
492
diff
changeset
|
341 |
5 | 342 #ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ |
343 { | |
344 struct mntent *mnt; | |
345 char *table = MOUNTED; | |
346 FILE *fp; | |
347 char *devopt; | |
348 | |
349 fp = setmntent (table, "r"); | |
350 if (fp == NULL) | |
351 return NULL; | |
352 | |
353 while ((mnt = getmntent (fp))) | |
354 { | |
355 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | |
356 me->me_devname = xstrdup (mnt->mnt_fsname); | |
357 me->me_mountdir = xstrdup (mnt->mnt_dir); | |
358 me->me_type = xstrdup (mnt->mnt_type); | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
359 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
360 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
5 | 361 devopt = strstr (mnt->mnt_opts, "dev="); |
362 if (devopt) | |
363 { | |
364 if (devopt[4] == '0' && (devopt[5] == 'x' || devopt[5] == 'X')) | |
365 me->me_dev = xatoi (devopt + 6); | |
366 else | |
367 me->me_dev = xatoi (devopt + 4); | |
368 } | |
369 else | |
492
33a21db1201a
(read_filesystem_list): Cast -1 to dev_t before assignment.
Jim Meyering <jim@meyering.net>
parents:
326
diff
changeset
|
370 me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
5 | 371 |
372 /* Add to the linked list. */ | |
1413 | 373 *mtail = me; |
374 mtail = &me->me_next; | |
5 | 375 } |
376 | |
377 if (endmntent (fp) == 0) | |
1413 | 378 goto free_then_fail; |
5 | 379 } |
380 #endif /* MOUNTED_GETMNTENT1. */ | |
381 | |
382 #ifdef MOUNTED_GETMNTINFO /* 4.4BSD. */ | |
383 { | |
384 struct statfs *fsp; | |
385 int entries; | |
386 | |
387 entries = getmntinfo (&fsp, MNT_NOWAIT); | |
388 if (entries < 0) | |
389 return NULL; | |
1443
13bcee72981f
(read_filesystem_list): If all_fs is negative, omit non-local filesytems.
Jim Meyering <jim@meyering.net>
parents:
1436
diff
changeset
|
390 for (; entries-- > 0; fsp++) |
5 | 391 { |
1444
8a70cc03ce0d
(read_filesystem_list) [MOUNTED_GETMNTINFO]: Use fsp_to_string.
Jim Meyering <jim@meyering.net>
parents:
1443
diff
changeset
|
392 char *fs_type = fsp_to_string (fsp); |
1443
13bcee72981f
(read_filesystem_list): If all_fs is negative, omit non-local filesytems.
Jim Meyering <jim@meyering.net>
parents:
1436
diff
changeset
|
393 |
5 | 394 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); |
395 me->me_devname = xstrdup (fsp->f_mntfromname); | |
396 me->me_mountdir = xstrdup (fsp->f_mntonname); | |
1444
8a70cc03ce0d
(read_filesystem_list) [MOUNTED_GETMNTINFO]: Use fsp_to_string.
Jim Meyering <jim@meyering.net>
parents:
1443
diff
changeset
|
397 me->me_type = fs_type; |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
398 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
399 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
492
33a21db1201a
(read_filesystem_list): Cast -1 to dev_t before assignment.
Jim Meyering <jim@meyering.net>
parents:
326
diff
changeset
|
400 me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
5 | 401 |
402 /* Add to the linked list. */ | |
1413 | 403 *mtail = me; |
404 mtail = &me->me_next; | |
5 | 405 } |
406 } | |
407 #endif /* MOUNTED_GETMNTINFO */ | |
408 | |
409 #ifdef MOUNTED_GETMNT /* Ultrix. */ | |
410 { | |
411 int offset = 0; | |
412 int val; | |
413 struct fs_data fsd; | |
414 | |
1413 | 415 while (errno = 0, |
1476
2fc06b743001
(read_filesystem_list) [MOUNTED_GETMNT]: Don't infloop on getmnt(2) returning 0.
Jim Meyering <jim@meyering.net>
parents:
1453
diff
changeset
|
416 0 < (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY, |
2fc06b743001
(read_filesystem_list) [MOUNTED_GETMNT]: Don't infloop on getmnt(2) returning 0.
Jim Meyering <jim@meyering.net>
parents:
1453
diff
changeset
|
417 (char *) 0))) |
5 | 418 { |
419 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | |
420 me->me_devname = xstrdup (fsd.fd_req.devname); | |
421 me->me_mountdir = xstrdup (fsd.fd_req.path); | |
422 me->me_type = gt_names[fsd.fd_req.fstype]; | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
423 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
424 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
5 | 425 me->me_dev = fsd.fd_req.dev; |
426 | |
427 /* Add to the linked list. */ | |
1413 | 428 *mtail = me; |
429 mtail = &me->me_next; | |
5 | 430 } |
431 if (val < 0) | |
1413 | 432 goto free_then_fail; |
5 | 433 } |
434 #endif /* MOUNTED_GETMNT. */ | |
435 | |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
436 #if defined MOUNTED_FS_STAT_DEV /* BeOS */ |
2453
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
437 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
438 /* The next_dev() and fs_stat_dev() system calls give the list of |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
439 all filesystems, including the information returned by statvfs() |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
440 (fs type, total blocks, free blocks etc.), but without the mount |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
441 point. But on BeOS all filesystems except / are mounted in the |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
442 rootfs, directly under /. |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
443 The directory name of the mount point is often, but not always, |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
444 identical to the volume name of the device. |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
445 We therefore get the list of subdirectories of /, and the list |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
446 of all filesystems, and match the two lists. */ |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
447 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
448 DIR *dirp; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
449 struct rootdir_entry |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
450 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
451 char *name; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
452 dev_t dev; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
453 ino_t ino; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
454 struct rootdir_entry *next; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
455 }; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
456 struct rootdir_entry *rootdir_list; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
457 struct rootdir_entry **rootdir_tail; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
458 int32 pos; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
459 dev_t dev; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
460 fs_info fi; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
461 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
462 /* All volumes are mounted in the rootfs, directly under /. */ |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
463 rootdir_list = NULL; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
464 rootdir_tail = &rootdir_list; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
465 dirp = opendir ("/"); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
466 if (dirp) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
467 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
468 struct dirent *d; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
469 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
470 while ((d = readdir (dirp)) != NULL) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
471 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
472 char *name; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
473 struct stat statbuf; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
474 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
475 if (strcmp (d->d_name, "..") == 0) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
476 continue; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
477 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
478 if (strcmp (d->d_name, ".") == 0) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
479 name = xstrdup ("/"); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
480 else |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
481 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
482 name = xmalloc (1 + strlen (d->d_name) + 1); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
483 name[0] = '/'; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
484 strcpy (name + 1, d->d_name); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
485 } |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
486 |
2677
a15fc2b3bc82
Use MOUNTED_FS_STAT_DEV instead of MOUNTED_NEXT_DEV,
Jim Meyering <jim@meyering.net>
parents:
2667
diff
changeset
|
487 if (lstat (name, &statbuf) >= 0 && S_ISDIR (statbuf.st_mode)) |
2453
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
488 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
489 struct rootdir_entry *re; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
490 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
491 re = (struct rootdir_entry *) xmalloc (sizeof (struct rootdir_entry)); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
492 re->name = name; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
493 re->dev = statbuf.st_dev; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
494 re->ino = statbuf.st_ino; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
495 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
496 /* Add to the linked list. */ |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
497 *rootdir_tail = re; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
498 rootdir_tail = &re->next; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
499 } |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
500 else |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
501 free (name); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
502 } |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
503 closedir (dirp); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
504 } |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
505 *rootdir_tail = NULL; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
506 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
507 for (pos = 0; (dev = next_dev (&pos)) >= 0; ) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
508 if (fs_stat_dev (dev, &fi) >= 0) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
509 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
510 /* Note: fi.dev == dev. */ |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
511 struct rootdir_entry *re; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
512 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
513 for (re = rootdir_list; re; re = re->next) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
514 if (re->dev == fi.dev && re->ino == fi.root) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
515 break; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
516 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
517 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
518 me->me_devname = xstrdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
519 me->me_mountdir = xstrdup (re != NULL ? re->name : fi.fsh_name); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
520 me->me_type = xstrdup (fi.fsh_name); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
521 me->me_dev = fi.dev; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
522 me->me_dummy = 0; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
523 me->me_remote = (fi.flags & B_FS_IS_SHARED) != 0; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
524 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
525 /* Add to the linked list. */ |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
526 *mtail = me; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
527 mtail = &me->me_next; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
528 } |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
529 *mtail = NULL; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
530 |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
531 while (rootdir_list != NULL) |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
532 { |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
533 struct rootdir_entry *re = rootdir_list; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
534 rootdir_list = re->next; |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
535 free (re->name); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
536 free (re); |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
537 } |
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
538 } |
2677
a15fc2b3bc82
Use MOUNTED_FS_STAT_DEV instead of MOUNTED_NEXT_DEV,
Jim Meyering <jim@meyering.net>
parents:
2667
diff
changeset
|
539 #endif /* MOUNTED_FS_STAT_DEV */ |
2453
f3784b04894c
(read_filesystem_list): Add BeOS support.
Jim Meyering <jim@meyering.net>
parents:
1887
diff
changeset
|
540 |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
541 #if defined MOUNTED_GETFSSTAT /* __alpha running OSF_1 */ |
326 | 542 { |
543 int numsys, counter, bufsize; | |
544 struct statfs *stats; | |
545 | |
546 numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT); | |
547 if (numsys < 0) | |
548 return (NULL); | |
549 | |
550 bufsize = (1 + numsys) * sizeof (struct statfs); | |
551 stats = (struct statfs *)xmalloc (bufsize); | |
552 numsys = getfsstat (stats, bufsize, MNT_WAIT); | |
553 | |
554 if (numsys < 0) | |
555 { | |
556 free (stats); | |
557 return (NULL); | |
558 } | |
559 | |
560 for (counter = 0; counter < numsys; counter++) | |
561 { | |
562 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | |
563 me->me_devname = xstrdup (stats[counter].f_mntfromname); | |
564 me->me_mountdir = xstrdup (stats[counter].f_mntonname); | |
3537 | 565 me->me_type = xstrdup (FS_TYPE (stats[counter])); |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
566 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
567 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
492
33a21db1201a
(read_filesystem_list): Cast -1 to dev_t before assignment.
Jim Meyering <jim@meyering.net>
parents:
326
diff
changeset
|
568 me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
326 | 569 |
570 /* Add to the linked list. */ | |
1413 | 571 *mtail = me; |
572 mtail = &me->me_next; | |
326 | 573 } |
574 | |
575 free (stats); | |
576 } | |
577 #endif /* MOUNTED_GETFSSTAT */ | |
578 | |
3502
ebfd8c693504
Remove useless parentheses in #if directives.
Jim Meyering <jim@meyering.net>
parents:
2677
diff
changeset
|
579 #if defined MOUNTED_FREAD || defined MOUNTED_FREAD_FSTYP /* SVR[23]. */ |
5 | 580 { |
581 struct mnttab mnt; | |
582 char *table = "/etc/mnttab"; | |
583 FILE *fp; | |
584 | |
585 fp = fopen (table, "r"); | |
586 if (fp == NULL) | |
587 return NULL; | |
588 | |
589 while (fread (&mnt, sizeof mnt, 1, fp) > 0) | |
590 { | |
591 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | |
917 | 592 # ifdef GETFSTYP /* SVR3. */ |
5 | 593 me->me_devname = xstrdup (mnt.mt_dev); |
917 | 594 # else |
5 | 595 me->me_devname = xmalloc (strlen (mnt.mt_dev) + 6); |
596 strcpy (me->me_devname, "/dev/"); | |
597 strcpy (me->me_devname + 5, mnt.mt_dev); | |
917 | 598 # endif |
5 | 599 me->me_mountdir = xstrdup (mnt.mt_filsys); |
492
33a21db1201a
(read_filesystem_list): Cast -1 to dev_t before assignment.
Jim Meyering <jim@meyering.net>
parents:
326
diff
changeset
|
600 me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
601 me->me_type = ""; |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
602 # ifdef GETFSTYP /* SVR3. */ |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
603 if (need_fs_type) |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
604 { |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
605 struct statfs fsd; |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
606 char typebuf[FSTYPSZ]; |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
607 |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
608 if (statfs (me->me_mountdir, &fsd, sizeof fsd, 0) != -1 |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
609 && sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1) |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
610 me->me_type = xstrdup (typebuf); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
611 } |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
612 # endif |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
613 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
614 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
5 | 615 |
616 /* Add to the linked list. */ | |
1413 | 617 *mtail = me; |
618 mtail = &me->me_next; | |
619 } | |
620 | |
621 if (ferror (fp)) | |
622 { | |
623 int saved_errno = errno; | |
624 fclose (fp); | |
625 errno = saved_errno; | |
626 goto free_then_fail; | |
5 | 627 } |
628 | |
629 if (fclose (fp) == EOF) | |
1413 | 630 goto free_then_fail; |
5 | 631 } |
632 #endif /* MOUNTED_FREAD || MOUNTED_FREAD_FSTYP. */ | |
633 | |
326 | 634 #ifdef MOUNTED_GETMNTTBL /* DolphinOS goes it's own way */ |
635 { | |
636 struct mntent **mnttbl=getmnttbl(),**ent; | |
637 for (ent=mnttbl;*ent;ent++) | |
638 { | |
639 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | |
640 me->me_devname = xstrdup ( (*ent)->mt_resource); | |
641 me->me_mountdir = xstrdup( (*ent)->mt_directory); | |
642 me->me_type = xstrdup ((*ent)->mt_fstype); | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
643 me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
644 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
492
33a21db1201a
(read_filesystem_list): Cast -1 to dev_t before assignment.
Jim Meyering <jim@meyering.net>
parents:
326
diff
changeset
|
645 me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
326 | 646 |
647 /* Add to the linked list. */ | |
1413 | 648 *mtail = me; |
649 mtail = &me->me_next; | |
326 | 650 } |
651 endmnttbl(); | |
652 } | |
653 #endif | |
654 | |
5 | 655 #ifdef MOUNTED_GETMNTENT2 /* SVR4. */ |
656 { | |
657 struct mnttab mnt; | |
658 char *table = MNTTAB; | |
659 FILE *fp; | |
660 int ret; | |
1399
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
661 int lockfd = -1; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
662 |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
663 # if defined F_RDLCK && defined F_SETLKW |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
664 /* MNTTAB_LOCK is a macro name of our own invention; it's not present in |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
665 e.g. Solaris 2.6. If the SVR4 folks ever define a macro |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
666 for this file name, we should use their macro name instead. |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
667 (Why not just lock MNTTAB directly? We don't know.) */ |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
668 # ifndef MNTTAB_LOCK |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
669 # define MNTTAB_LOCK "/etc/.mnttab.lock" |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
670 # endif |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
671 lockfd = open (MNTTAB_LOCK, O_RDONLY); |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
672 if (0 <= lockfd) |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
673 { |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
674 struct flock flock; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
675 flock.l_type = F_RDLCK; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
676 flock.l_whence = SEEK_SET; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
677 flock.l_start = 0; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
678 flock.l_len = 0; |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
679 while (fcntl (lockfd, F_SETLKW, &flock) == -1) |
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
680 if (errno != EINTR) |
1413 | 681 { |
682 int saved_errno = errno; | |
683 close (lockfd); | |
684 errno = saved_errno; | |
685 return NULL; | |
686 } | |
1399
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
687 } |
1413 | 688 else if (errno != ENOENT) |
689 return NULL; | |
1399
edb0581923b9
(read_filesystem_list): If SVR4, lock /etc/.mnttab.lock if available,
Jim Meyering <jim@meyering.net>
parents:
1396
diff
changeset
|
690 # endif |
5 | 691 |
1413 | 692 errno = 0; |
5 | 693 fp = fopen (table, "r"); |
694 if (fp == NULL) | |
1413 | 695 ret = errno; |
1401 | 696 else |
1400
8e5de8bcae9f
(read_filesystem_list) [MOUNTED_GETMNTENT2]:
Jim Meyering <jim@meyering.net>
parents:
1399
diff
changeset
|
697 { |
1401 | 698 while ((ret = getmntent (fp, &mnt)) == 0) |
699 { | |
700 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | |
701 me->me_devname = xstrdup (mnt.mnt_special); | |
702 me->me_mountdir = xstrdup (mnt.mnt_mountp); | |
703 me->me_type = xstrdup (mnt.mnt_fstype); | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
704 me->me_dummy = MNT_IGNORE (&mnt) != 0; |
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
705 me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
1401 | 706 me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
707 | |
708 /* Add to the linked list. */ | |
1413 | 709 *mtail = me; |
710 mtail = &me->me_next; | |
1401 | 711 } |
712 | |
1413 | 713 ret = fclose (fp) == EOF ? errno : 0 < ret ? 0 : -1; |
1400
8e5de8bcae9f
(read_filesystem_list) [MOUNTED_GETMNTENT2]:
Jim Meyering <jim@meyering.net>
parents:
1399
diff
changeset
|
714 } |
5 | 715 |
1401 | 716 if (0 <= lockfd && close (lockfd) != 0) |
1413 | 717 ret = errno; |
5 | 718 |
1413 | 719 if (0 <= ret) |
720 { | |
721 errno = ret; | |
722 goto free_then_fail; | |
723 } | |
5 | 724 } |
725 #endif /* MOUNTED_GETMNTENT2. */ | |
726 | |
727 #ifdef MOUNTED_VMOUNT /* AIX. */ | |
728 { | |
729 int bufsize; | |
730 char *entries, *thisent; | |
2570
70878b295de9
move vmp decl back out to the scope where it belongs
Jim Meyering <jim@meyering.net>
parents:
2553
diff
changeset
|
731 struct vmount *vmp; |
5 | 732 |
733 /* Ask how many bytes to allocate for the mounted filesystem info. */ | |
734 mntctl (MCTL_QUERY, sizeof bufsize, (struct vmount *) &bufsize); | |
735 entries = xmalloc (bufsize); | |
736 | |
737 /* Get the list of mounted filesystems. */ | |
738 mntctl (MCTL_QUERY, bufsize, (struct vmount *) entries); | |
739 | |
740 for (thisent = entries; thisent < entries + bufsize; | |
741 thisent += vmp->vmt_length) | |
742 { | |
2550
3ce1a171e216
(read_filesystem_list) [MOUNTED_VMOUNT]: Ignore mounts
Jim Meyering <jim@meyering.net>
parents:
2453
diff
changeset
|
743 char *options, *ignore; |
3ce1a171e216
(read_filesystem_list) [MOUNTED_VMOUNT]: Ignore mounts
Jim Meyering <jim@meyering.net>
parents:
2453
diff
changeset
|
744 |
2553
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
745 vmp = (struct vmount *) thisent; |
5 | 746 me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); |
747 if (vmp->vmt_flags & MNT_REMOTE) | |
748 { | |
749 char *host, *path; | |
750 | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
751 me->me_remote = 1; |
5 | 752 /* Prepend the remote pathname. */ |
753 host = thisent + vmp->vmt_data[VMT_HOSTNAME].vmt_off; | |
754 path = thisent + vmp->vmt_data[VMT_OBJECT].vmt_off; | |
755 me->me_devname = xmalloc (strlen (host) + strlen (path) + 2); | |
756 strcpy (me->me_devname, host); | |
757 strcat (me->me_devname, ":"); | |
758 strcat (me->me_devname, path); | |
759 } | |
760 else | |
761 { | |
1453
d5f389e692e8
(read_filesystem_list): Remove all_fs
Jim Meyering <jim@meyering.net>
parents:
1446
diff
changeset
|
762 me->me_remote = 0; |
326 | 763 me->me_devname = xstrdup (thisent + |
5 | 764 vmp->vmt_data[VMT_OBJECT].vmt_off); |
765 } | |
766 me->me_mountdir = xstrdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off); | |
767 me->me_type = xstrdup (fstype_to_string (vmp->vmt_gfstype)); | |
2553
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
768 options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off; |
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
769 ignore = strstr (options, "ignore"); |
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
770 me->me_dummy = (ignore |
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
771 && (ignore == options || ignore[-1] == ',') |
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
772 && (ignore[sizeof "ignore" - 1] == ',' |
d9a356ee2e12
Back out last change. Instead, do this...
Jim Meyering <jim@meyering.net>
parents:
2550
diff
changeset
|
773 || ignore[sizeof "ignore" - 1] == '\0')); |
492
33a21db1201a
(read_filesystem_list): Cast -1 to dev_t before assignment.
Jim Meyering <jim@meyering.net>
parents:
326
diff
changeset
|
774 me->me_dev = (dev_t) -1; /* vmt_fsid might be the info we want. */ |
5 | 775 |
776 /* Add to the linked list. */ | |
1413 | 777 *mtail = me; |
778 mtail = &me->me_next; | |
5 | 779 } |
780 free (entries); | |
781 } | |
782 #endif /* MOUNTED_VMOUNT. */ | |
783 | |
1413 | 784 *mtail = NULL; |
5 | 785 return mount_list; |
1413 | 786 |
787 | |
788 free_then_fail: | |
789 { | |
790 int saved_errno = errno; | |
791 *mtail = NULL; | |
1436
5919c19d9a1a
(read_filesystem_list): Fix more memory leaks on failure.
Jim Meyering <jim@meyering.net>
parents:
1413
diff
changeset
|
792 |
1413 | 793 while (mount_list) |
794 { | |
795 me = mount_list->me_next; | |
1436
5919c19d9a1a
(read_filesystem_list): Fix more memory leaks on failure.
Jim Meyering <jim@meyering.net>
parents:
1413
diff
changeset
|
796 free (mount_list->me_devname); |
5919c19d9a1a
(read_filesystem_list): Fix more memory leaks on failure.
Jim Meyering <jim@meyering.net>
parents:
1413
diff
changeset
|
797 free (mount_list->me_mountdir); |
5919c19d9a1a
(read_filesystem_list): Fix more memory leaks on failure.
Jim Meyering <jim@meyering.net>
parents:
1413
diff
changeset
|
798 /* FIXME: me_type is not always malloced. */ |
1413 | 799 free (mount_list); |
800 mount_list = me; | |
801 } | |
802 | |
803 errno = saved_errno; | |
804 return NULL; | |
805 } | |
5 | 806 } |