version 1.8.2.1, 1996/09/19 20:02:35 |
version 1.16, 1998/10/16 11:24:30 |
|
|
* SUCH DAMAGE. |
* SUCH DAMAGE. |
*/ |
*/ |
|
|
|
#include <sys/cdefs.h> |
#if defined(LIBC_SCCS) && !defined(lint) |
#if defined(LIBC_SCCS) && !defined(lint) |
#if 0 |
#if 0 |
static char sccsid[] = "@(#)fstab.c 8.1 (Berkeley) 6/4/93"; |
static char sccsid[] = "@(#)fstab.c 8.1 (Berkeley) 6/4/93"; |
#else |
#else |
static char rcsid[] = "$NetBSD$"; |
__RCSID("$NetBSD$"); |
#endif |
#endif |
#endif /* LIBC_SCCS and not lint */ |
#endif /* LIBC_SCCS and not lint */ |
|
|
#include "namespace.h" |
#include "namespace.h" |
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/uio.h> |
#include <sys/uio.h> |
|
#include <err.h> |
#include <errno.h> |
#include <errno.h> |
#include <fstab.h> |
#include <fstab.h> |
#include <stdio.h> |
#include <stdio.h> |
Line 68 static int fstabscan __P((void)); |
|
Line 70 static int fstabscan __P((void)); |
|
static int |
static int |
fstabscan() |
fstabscan() |
{ |
{ |
register char *cp; |
char *cp; |
#define MAXLINELENGTH 1024 |
#define MAXLINELENGTH 1024 |
static char line[MAXLINELENGTH]; |
static char line[MAXLINELENGTH]; |
char subline[MAXLINELENGTH]; |
char subline[MAXLINELENGTH]; |
int typexx; |
int typexx; |
|
char *lastp; |
|
static const char sep[] = ":\n"; |
|
static const char ws[] = " \t\n"; |
|
|
for (;;) { |
for (;;) { |
if (!(cp = fgets(line, sizeof(line), _fs_fp))) |
if (!(cp = fgets(line, sizeof(line), _fs_fp))) |
return(0); |
return(0); |
/* OLD_STYLE_FSTAB */ |
/* OLD_STYLE_FSTAB */ |
if (!strpbrk(cp, " \t")) { |
if (!strpbrk(cp, " \t")) { |
_fs_fstab.fs_spec = strtok(cp, ":\n"); |
_fs_fstab.fs_spec = strtok_r(cp, sep, &lastp); |
if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#') |
if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#') |
continue; |
continue; |
_fs_fstab.fs_file = strtok((char *)NULL, ":\n"); |
_fs_fstab.fs_file = strtok_r(NULL, sep, &lastp); |
_fs_fstab.fs_type = strtok((char *)NULL, ":\n"); |
_fs_fstab.fs_type = strtok_r(NULL, sep, &lastp); |
if (_fs_fstab.fs_type) { |
if (_fs_fstab.fs_type) { |
if (!strcmp(_fs_fstab.fs_type, FSTAB_XX)) |
if (!strcmp(_fs_fstab.fs_type, FSTAB_XX)) |
continue; |
continue; |
|
|
_fs_fstab.fs_vfstype = |
_fs_fstab.fs_vfstype = |
strcmp(_fs_fstab.fs_type, FSTAB_SW) ? |
strcmp(_fs_fstab.fs_type, FSTAB_SW) ? |
"ufs" : "swap"; |
"ufs" : "swap"; |
if (cp = strtok((char *)NULL, ":\n")) { |
if ((cp = strtok_r(NULL, sep, &lastp)) |
|
!= NULL) { |
_fs_fstab.fs_freq = atoi(cp); |
_fs_fstab.fs_freq = atoi(cp); |
if (cp = strtok((char *)NULL, ":\n")) { |
if ((cp = strtok_r(NULL, sep, &lastp)) |
|
!= NULL) { |
_fs_fstab.fs_passno = atoi(cp); |
_fs_fstab.fs_passno = atoi(cp); |
return(1); |
return(1); |
} |
} |
|
|
goto bad; |
goto bad; |
} |
} |
/* OLD_STYLE_FSTAB */ |
/* OLD_STYLE_FSTAB */ |
_fs_fstab.fs_spec = strtok(cp, " \t\n"); |
_fs_fstab.fs_spec = strtok_r(cp, ws, &lastp); |
if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#') |
if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#') |
continue; |
continue; |
_fs_fstab.fs_file = strtok((char *)NULL, " \t\n"); |
_fs_fstab.fs_file = strtok_r(NULL, ws, &lastp); |
_fs_fstab.fs_vfstype = strtok((char *)NULL, " \t\n"); |
_fs_fstab.fs_vfstype = strtok_r(NULL, ws, &lastp); |
_fs_fstab.fs_mntops = strtok((char *)NULL, " \t\n"); |
_fs_fstab.fs_mntops = strtok_r(NULL, ws, &lastp); |
if (_fs_fstab.fs_mntops == NULL) |
if (_fs_fstab.fs_mntops == NULL) |
goto bad; |
goto bad; |
_fs_fstab.fs_freq = 0; |
_fs_fstab.fs_freq = 0; |
_fs_fstab.fs_passno = 0; |
_fs_fstab.fs_passno = 0; |
if ((cp = strtok((char *)NULL, " \t\n")) != NULL) { |
if ((cp = strtok_r(NULL, ws, &lastp)) != NULL) { |
_fs_fstab.fs_freq = atoi(cp); |
_fs_fstab.fs_freq = atoi(cp); |
if ((cp = strtok((char *)NULL, " \t\n")) != NULL) |
if ((cp = strtok_r(NULL, ws, &lastp)) != NULL) |
_fs_fstab.fs_passno = atoi(cp); |
_fs_fstab.fs_passno = atoi(cp); |
} |
} |
strcpy(subline, _fs_fstab.fs_mntops); |
(void)strncpy(subline, _fs_fstab.fs_mntops, sizeof(subline)-1); |
for (typexx = 0, cp = strtok(subline, ","); cp; |
for (typexx = 0, cp = strtok_r(subline, ",", &lastp); cp; |
cp = strtok((char *)NULL, ",")) { |
cp = strtok_r((char *)NULL, ",", &lastp)) { |
if (strlen(cp) != 2) |
if (strlen(cp) != 2) |
continue; |
continue; |
if (!strcmp(cp, FSTAB_RW)) { |
if (!strcmp(cp, FSTAB_RW)) { |
Line 158 bad: /* no way to distinguish between E |
|
Line 165 bad: /* no way to distinguish between E |
|
struct fstab * |
struct fstab * |
getfsent() |
getfsent() |
{ |
{ |
if (!_fs_fp && !setfsent() || !fstabscan()) |
if ((!_fs_fp && !setfsent()) || !fstabscan()) |
return((struct fstab *)NULL); |
return((struct fstab *)NULL); |
return(&_fs_fstab); |
return(&_fs_fstab); |
} |
} |
|
|
struct fstab * |
struct fstab * |
getfsspec(name) |
getfsspec(name) |
register const char *name; |
const char *name; |
{ |
{ |
if (setfsent()) |
if (setfsent()) |
while (fstabscan()) |
while (fstabscan()) |
|
|
|
|
struct fstab * |
struct fstab * |
getfsfile(name) |
getfsfile(name) |
register const char *name; |
const char *name; |
{ |
{ |
if (setfsent()) |
if (setfsent()) |
while (fstabscan()) |
while (fstabscan()) |
|
|
rewind(_fs_fp); |
rewind(_fs_fp); |
return(1); |
return(1); |
} |
} |
if (_fs_fp = fopen(_PATH_FSTAB, "r")) |
if ((_fs_fp = fopen(_PATH_FSTAB, "r")) != NULL) |
return(1); |
return(1); |
error(errno); |
error(errno); |
return(0); |
return(0); |
|
|
error(err) |
error(err) |
int err; |
int err; |
{ |
{ |
struct iovec iov[5]; |
|
|
|
iov[0].iov_base = "fstab: "; |
errno = err; |
iov[0].iov_len = 7; |
warn(_PATH_FSTAB); |
iov[1].iov_base = _PATH_FSTAB; |
|
iov[1].iov_len = sizeof(_PATH_FSTAB) - 1; |
|
iov[2].iov_base = ": "; |
|
iov[2].iov_len = 2; |
|
iov[3].iov_base = strerror(err); |
|
iov[3].iov_len = strlen(iov[3].iov_base); |
|
iov[4].iov_base = "\n"; |
|
iov[4].iov_len = 1; |
|
(void)writev(STDERR_FILENO, iov, 5); |
|
} |
} |