Module Name: src
Committed By: christos
Date: Sun Nov 26 03:06:24 UTC 2017
Modified Files:
src/sbin/mount_qemufwcfg: Makefile fwcfg.c virtdir.c virtdir.h
Removed Files:
src/sbin/mount_qemufwcfg: defs.h
Log Message:
cleanup, knf, remove debugging printf, homebrew alloc macros, types.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sbin/mount_qemufwcfg/Makefile \
src/sbin/mount_qemufwcfg/fwcfg.c src/sbin/mount_qemufwcfg/virtdir.c \
src/sbin/mount_qemufwcfg/virtdir.h
cvs rdiff -u -r1.1 -r0 src/sbin/mount_qemufwcfg/defs.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/mount_qemufwcfg/Makefile
diff -u src/sbin/mount_qemufwcfg/Makefile:1.1 src/sbin/mount_qemufwcfg/Makefile:1.2
--- src/sbin/mount_qemufwcfg/Makefile:1.1 Sat Nov 25 18:23:39 2017
+++ src/sbin/mount_qemufwcfg/Makefile Sat Nov 25 22:06:24 2017
@@ -1,11 +1,12 @@
-# $NetBSD: Makefile,v 1.1 2017/11/25 23:23:39 jmcneill Exp $
+# $NetBSD: Makefile,v 1.2 2017/11/26 03:06:24 christos Exp $
+
+WARNS= 6
PROG= mount_qemufwcfg
SRCS= fwcfg.c virtdir.c
-DPADD+= ${LIBREFUSE}
-LDADD= -lrefuse
+DPADD+= ${LIBREFUSE} ${LIBUTIL}
+LDADD= -lrefuse -lutil
NOMAN= # defined
-WARNS= 3
CPPFLAGS+= -D_KERNTYPES
Index: src/sbin/mount_qemufwcfg/fwcfg.c
diff -u src/sbin/mount_qemufwcfg/fwcfg.c:1.1 src/sbin/mount_qemufwcfg/fwcfg.c:1.2
--- src/sbin/mount_qemufwcfg/fwcfg.c:1.1 Sat Nov 25 18:23:39 2017
+++ src/sbin/mount_qemufwcfg/fwcfg.c Sat Nov 25 22:06:24 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: fwcfg.c,v 1.1 2017/11/25 23:23:39 jmcneill Exp $ */
+/* $NetBSD: fwcfg.c,v 1.2 2017/11/26 03:06:24 christos Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: fwcfg.c,v 1.1 2017/11/25 23:23:39 jmcneill Exp $");
+__RCSID("$NetBSD: fwcfg.c,v 1.2 2017/11/26 03:06:24 christos Exp $");
#include <sys/ioctl.h>
@@ -93,7 +93,7 @@ fwcfg_getattr(const char *path, struct s
switch (ep->type) {
case 'f':
memcpy(st, &fwcfg_virtdir.file, sizeof(*st));
- st->st_size = ep->tgtlen;
+ st->st_size = (off_t)ep->tgtlen;
st->st_mode = S_IFREG | fwcfg_file_mask;
break;
case 'd':
@@ -101,7 +101,7 @@ fwcfg_getattr(const char *path, struct s
st->st_mode = S_IFDIR | fwcfg_dir_mask;
break;
}
- st->st_ino = virtdir_offset(&fwcfg_virtdir, ep) + 10;
+ st->st_ino = (ino_t)virtdir_offset(&fwcfg_virtdir, ep) + 10;
return 0;
}
@@ -152,15 +152,15 @@ fwcfg_read(const char *path, char *buf,
/* Seek to correct offset */
while (offset > 0) {
- const int len = MIN(sizeof(tmp), (size_t)offset);
+ const size_t len = MIN(sizeof(tmp), (size_t)offset);
read_data(tmp, len);
- offset -= len;
+ offset -= (off_t)len;
}
/* Read the data */
read_data(buf, size);
- return size;
+ return (int)size;
}
static int
@@ -198,8 +198,6 @@ build_tree(virtdir_t *v)
st.st_gid = fwcfg_gid;
virtdir_init(v, NULL, &st, &st, &st);
-printf("init with uid = %d, gid = %d\n", st.st_uid, st.st_gid);
-
set_index(FW_CFG_FILE_DIR);
read_data(&count, sizeof(count));
for (n = 0; n < be32toh(count); n++) {
@@ -210,11 +208,20 @@ printf("init with uid = %d, gid = %d\n",
}
}
+static __dead void
+usage(void)
+{
+ fprintf(stderr, "Usage: %s [-F <path>] [-g <gid>] [-m <file-mode>] "
+ "[-M <dir-mode>] [-u <uid>] [<fuse-options>]", getprogname());
+ exit(EXIT_FAILURE);
+}
+
int
main(int argc, char *argv[])
{
const char *path = _PATH_FWCFG;
- int ch, m;
+ int ch;
+ long m;
char *ep;
fwcfg_uid = geteuid();
@@ -226,23 +233,27 @@ main(int argc, char *argv[])
path = optarg;
break;
case 'g':
- fwcfg_gid = atoi(optarg);
+ fwcfg_gid = (gid_t)atoi(optarg);
break;
case 'm':
m = strtol(optarg, &ep, 8);
if (optarg == ep || *ep || m < 0)
- errx(1, "invalid file mode: %s", optarg);
- fwcfg_file_mask = m;
+ errx(EXIT_FAILURE, "invalid file mode: %s",
+ optarg);
+ fwcfg_file_mask = (mode_t)m;
break;
case 'M':
m = strtol(optarg, &ep, 8);
if (optarg == ep || *ep || m < 0)
- errx(1, "invalid file mode: %s", optarg);
- fwcfg_dir_mask = m;
+ errx(EXIT_FAILURE, "invalid directory mode: %s",
+ optarg);
+ fwcfg_dir_mask = (mode_t)m;
break;
case 'u':
- fwcfg_uid = atoi(optarg);
+ fwcfg_uid = (uid_t)atoi(optarg);
break;
+ default:
+ usage();
}
}
@@ -252,8 +263,5 @@ main(int argc, char *argv[])
build_tree(&fwcfg_virtdir);
- for (int i = 0; i < argc; i++)
- printf("argv[%d] = \"%s\"\n", i, argv[i]);
-
return fuse_main(argc, argv, &fwcfg_ops, NULL);
}
Index: src/sbin/mount_qemufwcfg/virtdir.c
diff -u src/sbin/mount_qemufwcfg/virtdir.c:1.1 src/sbin/mount_qemufwcfg/virtdir.c:1.2
--- src/sbin/mount_qemufwcfg/virtdir.c:1.1 Sat Nov 25 18:23:39 2017
+++ src/sbin/mount_qemufwcfg/virtdir.c Sat Nov 25 22:06:24 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: virtdir.c,v 1.1 2017/11/25 23:23:39 jmcneill Exp $ */
+/* $NetBSD: virtdir.c,v 1.2 2017/11/26 03:06:24 christos Exp $ */
/*
* Copyright � 2007 Alistair Crooks. All rights reserved.
@@ -29,40 +29,27 @@
*/
#include <sys/types.h>
+#include <sys/param.h>
#include <sys/stat.h>
#include <stdio.h>
+#include <string.h>
#include <stdlib.h>
#include <unistd.h>
+#include <util.h>
#include "virtdir.h"
-#include "defs.h"
/* utility comparison routine for sorting and searching */
static int
compare(const void *vp1, const void *vp2)
{
- const virt_dirent_t *tp1 = (const virt_dirent_t *) vp1;
- const virt_dirent_t *tp2 = (const virt_dirent_t *) vp2;
+ const virt_dirent_t *tp1 = (const virt_dirent_t *) vp1;
+ const virt_dirent_t *tp2 = (const virt_dirent_t *) vp2;
return strcmp(tp1->name, tp2->name);
}
-/* save `n' chars of `s' in allocated storage */
-static char *
-strnsave(const char *s, int n)
-{
- char *cp;
-
- if (n < 0) {
- n = strlen(s);
- }
- NEWARRAY(char, cp, n + 1, "strnsave", return NULL);
- (void) memcpy(cp, s, n);
- cp[n] = 0x0;
- return cp;
-}
-
/* ensure intermediate directories exist */
static void
mkdirs(virtdir_t *tp, const char *path, size_t size)
@@ -82,22 +69,24 @@ mkdirs(virtdir_t *tp, const char *path,
}
/* get rid of multiple slashes in input */
-static int
+static size_t
normalise(const char *name, size_t namelen, char *path, size_t pathsize)
{
const char *np;
char *pp;
int done;
- for (pp = path, np = name, done = 0 ; !done && (int)(pp - path) < pathsize - 1 && (int)(np - name) <= namelen ; ) {
- switch(*np) {
+ for (pp = path, np = name, done = 0 ; !done &&
+ (size_t)(pp - path) < pathsize - 1 &&
+ (size_t)(np - name) <= namelen; ) {
+ switch (*np) {
case '/':
if (pp == path || *(pp - 1) != '/') {
*pp++ = *np;
}
np += 1;
break;
- case 0x0:
+ case '\0':
done = 1;
break;
default:
@@ -106,25 +95,25 @@ normalise(const char *name, size_t namel
}
}
/* XXX - trailing slash? */
- *pp = 0x0;
- return (int)(pp - path);
+ *pp = '\0';
+ return (size_t)(pp - path);
}
/* initialise the tree */
int
virtdir_init(virtdir_t *tp, const char *rootdir, struct stat *d, struct stat *f, struct stat *l)
{
- (void) memcpy(&tp->dir, d, sizeof(tp->dir));
+ tp->dir = *d;
tp->dir.st_mode = S_IFDIR | 0755;
tp->dir.st_nlink = 2;
- (void) memcpy(&tp->file, f, sizeof(tp->file));
+ tp->file = *f;
tp->file.st_mode = S_IFREG | 0644;
tp->file.st_nlink = 1;
- (void) memcpy(&tp->lnk, l, sizeof(tp->lnk));
+ tp->lnk = *l;
tp->lnk.st_mode = S_IFLNK | 0644;
tp->lnk.st_nlink = 1;
if (rootdir != NULL) {
- tp->rootdir = strdup(rootdir);
+ tp->rootdir = estrdup(rootdir);
}
return 1;
}
@@ -134,17 +123,19 @@ int
virtdir_add(virtdir_t *tp, const char *name, size_t size, uint8_t type, const char *tgt, size_t tgtlen, uint16_t select)
{
char path[MAXPATHLEN];
- int pathlen;
+ size_t pathlen;
pathlen = normalise(name, size, path, sizeof(path));
if (virtdir_find(tp, path, pathlen) != NULL) {
/* attempt to add a duplicate directory entry */
return 0;
}
- ALLOC(virt_dirent_t, tp->v, tp->size, tp->c, 10, 10, "virtdir_add",
- return 0);
+ if (tp->c == tp->size || tp->size == 0) {
+ tp->size += 10,
+ tp->v = erealloc(tp->v, tp->size * sizeof(*tp->v));
+ }
tp->v[tp->c].namelen = pathlen;
- if ((tp->v[tp->c].name = strnsave(path, pathlen)) == NULL) {
+ if ((tp->v[tp->c].name = estrndup(path, pathlen)) == NULL) {
return 0;
}
tp->v[tp->c].d_name = strrchr(tp->v[tp->c].name, '/') + 1;
@@ -152,7 +143,7 @@ virtdir_add(virtdir_t *tp, const char *n
tp->v[tp->c].ino = (ino_t) random() & 0xfffff;
tp->v[tp->c].tgtlen = tgtlen;
if (tgt != NULL) {
- tp->v[tp->c].tgt = strnsave(tgt, tgtlen);
+ tp->v[tp->c].tgt = estrndup(tgt, tgtlen);
}
tp->v[tp->c].select = select;
tp->c += 1;
@@ -175,10 +166,10 @@ virtdir_find(virtdir_t *tp, const char *
}
/* return the virtual offset in the tree */
-int
+off_t
virtdir_offset(virtdir_t *tp, virt_dirent_t *dp)
{
- return (int)(dp - tp->v);
+ return dp - tp->v;
}
/* analogous to opendir(3) - open a directory, save information, and
@@ -188,8 +179,8 @@ openvirtdir(virtdir_t *tp, const char *d
{
VIRTDIR *dirp;
- NEW(VIRTDIR, dirp, "openvirtdir", exit(EXIT_FAILURE));
- dirp->dirname = strdup(d);
+ dirp = emalloc(sizeof(*dirp));
+ dirp->dirname = estrdup(d);
dirp->dirnamelen = strlen(d);
dirp->tp = tp;
dirp->i = 0;
@@ -205,12 +196,11 @@ readvirtdir(VIRTDIR *dirp)
for ( ; dirp->i < dirp->tp->c ; dirp->i++) {
from = (strcmp(dirp->dirname, "/") == 0) ?
- &dirp->tp->v[dirp->i].name[1] :
- &dirp->tp->v[dirp->i].name[dirp->dirnamelen + 1];
+ &dirp->tp->v[dirp->i].name[1] :
+ &dirp->tp->v[dirp->i].name[dirp->dirnamelen + 1];
if (strncmp(dirp->tp->v[dirp->i].name, dirp->dirname,
- dirp->dirnamelen) == 0 &&
- *from != 0x0 &&
- strchr(from, '/') == NULL) {
+ dirp->dirnamelen) == 0 &&
+ *from != '\0' && strchr(from, '/') == NULL) {
return &dirp->tp->v[dirp->i++];
}
}
@@ -222,5 +212,5 @@ void
closevirtdir(VIRTDIR *dirp)
{
free(dirp->dirname);
- FREE(dirp);
+ free(dirp);
}
Index: src/sbin/mount_qemufwcfg/virtdir.h
diff -u src/sbin/mount_qemufwcfg/virtdir.h:1.1 src/sbin/mount_qemufwcfg/virtdir.h:1.2
--- src/sbin/mount_qemufwcfg/virtdir.h:1.1 Sat Nov 25 18:23:39 2017
+++ src/sbin/mount_qemufwcfg/virtdir.h Sat Nov 25 22:06:24 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: virtdir.h,v 1.1 2017/11/25 23:23:39 jmcneill Exp $ */
+/* $NetBSD: virtdir.h,v 1.2 2017/11/26 03:06:24 christos Exp $ */
/*
* Copyright � 2007 Alistair Crooks. All rights reserved.
@@ -34,8 +34,6 @@
#include <sys/types.h>
#include <sys/stat.h>
-#include "defs.h"
-
/* this struct keeps a note of all the info related to a virtual directory entry */
typedef struct virt_dirent_t {
char *name; /* entry name - used as key */
@@ -63,9 +61,9 @@ typedef struct virtdir_t {
/* this struct is used to walk through directories */
typedef struct VIRTDIR {
char *dirname; /* directory name */
- int dirnamelen; /* length of directory name */
+ size_t dirnamelen; /* length of directory name */
virtdir_t *tp; /* the directory tree */
- int i; /* current offset in dir tree */
+ size_t i; /* current offset in dir tree */
} VIRTDIR;
int virtdir_init(virtdir_t *, const char *, struct stat *, struct stat *, struct stat *);
@@ -76,6 +74,6 @@ VIRTDIR *openvirtdir(virtdir_t *, const
virt_dirent_t *readvirtdir(VIRTDIR *);
void closevirtdir(VIRTDIR *);
-int virtdir_offset(virtdir_t *, virt_dirent_t *);
+off_t virtdir_offset(virtdir_t *, virt_dirent_t *);
#endif