* file named AUTHORS, in the root directory of this distribution.
*/
/*
- * $Id: getfsent.c,v 1.20.4.1.2.2.2.6.2.2 2005/09/30 19:13:36 martinea Exp $
+ * $Id: getfsent.c,v 1.38 2006/07/19 17:41:14 martinea Exp $
*
* generic version of code to read fstab
*/
#ifdef TEST
# include <stdio.h>
# include <sys/types.h>
-# undef P
-# define P(x) x
#endif
#include "getfsent.h"
+static char *dev2rdev(char *);
+
/*
* You are in a twisty maze of passages, all alike.
* Geesh.
#include <fstab.h>
-int open_fstab()
+int
+open_fstab(void)
{
return setfsent();
}
-void close_fstab()
+void
+close_fstab(void)
{
endfsent();
}
-int get_fstab_nextentry(fsent)
-generic_fsent_t *fsent;
+int
+get_fstab_nextentry(
+ generic_fsent_t * fsent)
{
struct fstab *sys_fsent = getfsent();
static char *xfsname = NULL, *xmntdir = NULL;
static FILE *fstabf = NULL;
-int open_fstab()
+int
+open_fstab(void)
{
close_fstab();
return (fstabf = fopen(VFSTAB, "r")) != NULL;
}
-void close_fstab()
+void
+close_fstab(void)
{
if(fstabf)
afclose(fstabf);
fstabf = NULL;
}
-int get_fstab_nextentry(fsent)
-generic_fsent_t *fsent;
+int
+get_fstab_nextentry(
+ generic_fsent_t * fsent)
{
struct vfstab sys_fsent;
+ memset(&sys_fsent, 0, SIZEOF(sys_fsent));
if(getvfsent(fstabf, &sys_fsent) != 0)
return 0;
static FILE *fstabf2 = NULL; /* MOUNTED */
static FILE *fstabf3 = NULL; /* MNTTAB */
-int open_fstab()
+int
+open_fstab(void)
{
close_fstab();
#if defined(HAVE_SETMNTENT)
return (fstabf1 != NULL || fstabf2 != NULL || fstabf3 != NULL);
}
-void close_fstab()
+void
+close_fstab(void)
{
if (fstabf1) {
AMCLOSE_MNTENT(fstabf1);
}
}
-int get_fstab_nextentry(fsent)
-generic_fsent_t *fsent;
+int
+get_fstab_nextentry(
+ generic_fsent_t * fsent)
{
struct mntent *sys_fsent = NULL;
static FILE *fstabf = NULL;
-int open_fstab()
+int
+open_fstab(void)
{
close_fstab();
return (fstabf = fopen(FSTAB, "r")) != NULL;
}
-void close_fstab()
+void
+close_fstab(void)
{
if(fstabf)
afclose(fstabf);
static generic_fsent_t _fsent;
-int get_fstab_nextentry(fsent)
-generic_fsent_t *fsent;
+int
+get_fstab_nextentry(
+ generic_fsent_t * fsent)
{
static char *lfsnam = NULL;
static char *opts = NULL;
amfree(cp);
for (; (cp = agets(fstabf)) != NULL; free(cp)) {
+ if (cp[0] == '\0')
+ continue;
fsent->fsname = strtok(cp, " \t");
if ( fsent->fsname && *fsent->fsname != '#' )
break;
}
fsent->fstype = lfsnam;
-#define sc "hs"
- if (strncmp(fsent->fstype, sc, sizeof(sc)-1) == 0)
+ if (strncmp_const(fsent->fstype, "hs") == 0)
fsent->fstype = "iso9660";
-#undef sc
fsent->freq = 0;
fsent->passno = 0;
static FILE *fstabf = NULL;
-int open_fstab()
+int
+open_fstab(void)
{
close_fstab();
return (fstabf = fopen(MNTTAB, "r")) != NULL;
}
-void close_fstab()
+void
+close_fstab(void)
{
if(fstabf)
afclose(fstabf);
static generic_fsent_t _fsent;
-int get_fstab_nextentry(fsent)
-generic_fsent_t *fsent;
+int
+get_fstab_nextentry(
+ generic_fsent_t *fsent)
{
struct statfs fsd;
char typebuf[FSTYPSZ];
static struct mnttab mnt;
char *dp, *ep;
- if(!fread (&mnt, sizeof mnt, 1, fstabf))
+ if(!fread (&mnt, SIZEOF(mnt), 1, fstabf))
return 0;
fsent->fsname = mnt.mt_dev;
fsent->mntdir = mnt.mt_filsys;
fsent->fstype = "";
- if (statfs (fsent->mntdir, &fsd, sizeof fsd, 0) != -1
+ if (statfs (fsent->mntdir, &fsd, SIZEOF(fsd), 0) != -1
&& sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1) {
dp = typebuf;
ep = fsent->fstype = malloc(strlen(typebuf)+2);
* Convert either a block or character device name to a character (raw)
* device name.
*
- * char *dev2rdev(char *name);
+ * static char *dev2rdev(const char *name);
*
* entry: name - device name to convert
* exit: matching character device name if found,
*=====================================================================
*/
-static char *dev2rdev(name)
-char *name;
+static char *
+dev2rdev(
+ char * name)
{
char *fname = NULL;
struct stat st;
if (ch == '/') {
s[-1] = '\0';
fname = newvstralloc(fname, name, "/r", s, NULL);
- s[-1] = ch;
+ s[-1] = (char)ch;
if(stat(fname, &st) == 0 && S_ISCHR(st.st_mode)) return fname;
}
ch = *s++;
return stralloc(name); /* no match */
}
-static int samefile(stats, estat)
-struct stat stats[3], *estat;
+#ifndef IGNORE_FSTAB
+static int samefile(struct stat[3], struct stat *);
+
+static int
+samefile(
+ struct stat stats[3],
+ struct stat *estat)
{
int i;
for(i = 0; i < 3; ++i) {
}
return 0;
}
+#endif /* !IGNORE_FSTAB */
-int search_fstab(name, fsent, check_dev)
- char *name;
- generic_fsent_t *fsent;
- int check_dev;
+int
+search_fstab(
+ char * name,
+ generic_fsent_t * fsent,
+ int check_dev)
{
#ifdef IGNORE_FSTAB
/* There is no real mount table so this will always fail and
* we are using GNU tar so we can just return here.
*/
+ (void)name; /* Quiet unused parameter warning */
+ (void)fsent; /* Quiet unused parameter warning */
+ (void)check_dev; /* Quiet unused parameter warning */
return 0;
#else
struct stat stats[3];
if (!name)
return 0;
- stats[0].st_dev = stats[1].st_dev = stats[2].st_dev = -1;
+ memset(stats, 0, SIZEOF(stats));
+ stats[0].st_dev = stats[1].st_dev = stats[2].st_dev = (dev_t)-1;
if (stat(name, &stats[0]) == -1)
- stats[0].st_dev = -1;
+ stats[0].st_dev = (dev_t)-1;
if (name[0] != '/') {
fullname = stralloc2(DEV_PREFIX, name);
if (stat(fullname, &stats[1]) == -1)
- stats[1].st_dev = -1;
+ stats[1].st_dev = (dev_t)-1;
fullname = newstralloc2(fullname, RDEV_PREFIX, name);
if (stat(fullname, &stats[2]) == -1)
- stats[2].st_dev = -1;
+ stats[2].st_dev = (dev_t)-1;
amfree(fullname);
}
else if (stat((rdev = dev2rdev(name)), &stats[1]) == -1)
- stats[1].st_dev = -1;
+ stats[1].st_dev = (dev_t)-1;
amfree(rdev);
#endif /* !IGNORE_FSTAB */
}
-int is_local_fstype(fsent)
-generic_fsent_t *fsent;
+int
+is_local_fstype(
+ generic_fsent_t * fsent)
{
if(fsent->fstype == NULL) /* unknown, assume local */
return 1;
}
-char *amname_to_devname(str)
-char *str;
+char *
+amname_to_devname(
+ char * str)
{
generic_fsent_t fsent;
return dev2rdev(str);
}
-char *amname_to_dirname(str)
-char *str;
+char *
+amname_to_dirname(
+ char * str)
{
generic_fsent_t fsent;
return stralloc(str);
}
-char *amname_to_fstype(str)
-char *str;
+char *amname_to_fstype(
+ char * str)
{
generic_fsent_t fsent;
#ifdef TEST
+void print_entry(generic_fsent_t *fsent);
+
void
-print_entry(fsent)
-generic_fsent_t *fsent;
+print_entry(
+ generic_fsent_t * fsent)
{
#define nchk(s) ((s)? (s) : "<NULL>")
printf("%-20.20s %-14.14s %-7.7s %4d %5d %s\n",
fsent->freq, fsent->passno, nchk(fsent->mntopts));
}
-int main(argc, argv)
- int argc;
- char **argv;
+int
+main(
+ int argc,
+ char ** argv)
{
generic_fsent_t fsent;
char *s;
set_pname("getfsent");
+ dbopen(NULL);
+
+ /* Don't die when child closes pipe */
+ signal(SIGPIPE, SIG_IGN);
+
malloc_size_1 = malloc_inuse(&malloc_hist_1);
if(!open_fstab()) {