diff options
author | deraadt <deraadt@openbsd.org> | 2003-06-11 06:22:12 +0000 |
---|---|---|
committer | deraadt <deraadt@openbsd.org> | 2003-06-11 06:22:12 +0000 |
commit | 8809fabba61e99de375b6d1055cb0a4a0119275e (patch) | |
tree | c18ac34d7980a56973d5502ee59c645922696c48 /sbin/fsdb | |
parent | typo (diff) | |
download | wireguard-openbsd-8809fabba61e99de375b6d1055cb0a4a0119275e.tar.xz wireguard-openbsd-8809fabba61e99de375b6d1055cb0a4a0119275e.zip |
ansification
Diffstat (limited to 'sbin/fsdb')
-rw-r--r-- | sbin/fsdb/fsdb.c | 1002 | ||||
-rw-r--r-- | sbin/fsdb/fsdbutil.c | 258 |
2 files changed, 624 insertions, 636 deletions
diff --git a/sbin/fsdb/fsdb.c b/sbin/fsdb/fsdb.c index 254b00b8679..36803f9e1a8 100644 --- a/sbin/fsdb/fsdb.c +++ b/sbin/fsdb/fsdb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fsdb.c,v 1.12 2003/04/17 06:56:04 deraadt Exp $ */ +/* $OpenBSD: fsdb.c,v 1.13 2003/06/11 06:22:13 deraadt Exp $ */ /* $NetBSD: fsdb.c,v 1.7 1997/01/11 06:50:53 lukem Exp $ */ /*- @@ -84,7 +84,7 @@ struct dinode *curinode; ino_t curinum; static void -usage() +usage(void) { fprintf(stderr, "usage: %s [-d] -f <fsname>\n", __progname); exit(1); @@ -97,9 +97,7 @@ usage() * the file system. */ int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char *argv[]) { int ch, rval; char *fsys = NULL; @@ -121,7 +119,7 @@ main(argc, argv) if (!setup(fsys)) errx(1, "cannot set up file system `%s'", fsys); printf("Editing file system `%s'\nLast Mounted on %s\n", fsys, - sblock.fs_fsmnt); + sblock.fs_fsmnt); rval = cmdloop(); sblock.fs_clean = 0; /* mark it dirty */ sbdirty(); @@ -133,9 +131,7 @@ main(argc, argv) } #define CMDFUNC(func) static int func(int argc, char *argv[]) -#define CMDFUNCSTART(func) static int func(argc, argv) \ - int argc; \ - char *argv[]; +#define CMDFUNCSTART(func) static int func(int argc, char *argv[]) CMDFUNC(helpfn); CMDFUNC(focus); /* focus on inode */ @@ -199,318 +195,317 @@ static struct cmdtable cmds[] = { }; static int -helpfn(argc, argv) - int argc; - char *argv[]; +helpfn(int argc, char *argv[]) { - struct cmdtable *cmdtp; + struct cmdtable *cmdtp; - printf("Commands are:\n%-10s %5s %5s %s\n", - "command", "min argc", "max argc", "what"); + printf("Commands are:\n%-10s %5s %5s %s\n", + "command", "min argc", "max argc", "what"); - for (cmdtp = cmds; cmdtp->cmd; cmdtp++) - printf("%-10s %5u %5u %s\n", - cmdtp->cmd, cmdtp->minargc, cmdtp->maxargc, cmdtp->helptxt); - return 0; + for (cmdtp = cmds; cmdtp->cmd; cmdtp++) + printf("%-10s %5u %5u %s\n", + cmdtp->cmd, cmdtp->minargc, cmdtp->maxargc, cmdtp->helptxt); + return 0; } static char * -prompt(el) - EditLine *el; +prompt(EditLine *el) { - static char pstring[64]; - snprintf(pstring, sizeof(pstring), "fsdb (inum: %d)> ", curinum); - return pstring; + static char pstring[64]; + + snprintf(pstring, sizeof(pstring), "fsdb (inum: %d)> ", curinum); + return pstring; } static int -cmdloop() +cmdloop(void) { - char *line = NULL; - const char *elline; - int cmd_argc, rval = 0, known; + char *line = NULL; + const char *elline; + int cmd_argc, rval = 0, known; #define scratch known - char **cmd_argv; - struct cmdtable *cmdp; - History *hist; - EditLine *elptr; - - curinode = ginode(ROOTINO); - curinum = ROOTINO; - printactive(); - - hist = history_init(); - history(hist, H_EVENT, 100); /* 100 elt history buffer */ - - elptr = el_init(__progname, stdin, stdout); - el_set(elptr, EL_EDITOR, "emacs"); - el_set(elptr, EL_PROMPT, prompt); - el_set(elptr, EL_HIST, history, hist); - el_source(elptr, NULL); - - while ((elline = el_gets(elptr, &scratch)) != NULL && scratch != 0) { - if (debug) - printf("command `%s'\n", line); - - history(hist, H_ENTER, elline); - - line = strdup(elline); - cmd_argv = crack(line, &cmd_argc); - if (cmd_argc) { - /* - * el_parse returns -1 to signal that it's not been handled - * internally. - */ - if (el_parse(elptr, cmd_argc, cmd_argv) != -1) - continue; - known = 0; - for (cmdp = cmds; cmdp->cmd; cmdp++) { - if (!strcmp(cmdp->cmd, cmd_argv[0])) { - if (cmd_argc >= cmdp->minargc && - cmd_argc <= cmdp->maxargc) - rval = (*cmdp->handler)(cmd_argc, cmd_argv); - else - rval = argcount(cmdp, cmd_argc, cmd_argv); - known = 1; - break; - } - } - if (!known) - warnx("unknown command `%s'", cmd_argv[0]), rval = 1; - } else - rval = 0; - free(line); - if (rval < 0) - return rval; - if (rval) - warnx("rval was %d", rval); - } - el_end(elptr); - history_end(hist); - return rval; + char **cmd_argv; + struct cmdtable *cmdp; + History *hist; + EditLine *elptr; + + curinode = ginode(ROOTINO); + curinum = ROOTINO; + printactive(); + + hist = history_init(); + history(hist, H_EVENT, 100); /* 100 elt history buffer */ + + elptr = el_init(__progname, stdin, stdout); + el_set(elptr, EL_EDITOR, "emacs"); + el_set(elptr, EL_PROMPT, prompt); + el_set(elptr, EL_HIST, history, hist); + el_source(elptr, NULL); + + while ((elline = el_gets(elptr, &scratch)) != NULL && scratch != 0) { + if (debug) + printf("command `%s'\n", line); + + history(hist, H_ENTER, elline); + + line = strdup(elline); + cmd_argv = crack(line, &cmd_argc); + if (cmd_argc) { + /* + * el_parse returns -1 to signal that it's not been handled + * internally. + */ + if (el_parse(elptr, cmd_argc, cmd_argv) != -1) + continue; + known = 0; + for (cmdp = cmds; cmdp->cmd; cmdp++) { + if (!strcmp(cmdp->cmd, cmd_argv[0])) { + if (cmd_argc >= cmdp->minargc && + cmd_argc <= cmdp->maxargc) + rval = (*cmdp->handler)(cmd_argc, + cmd_argv); + else + rval = argcount(cmdp, + cmd_argc, cmd_argv); + known = 1; + break; + } + } + if (!known) { + warnx("unknown command `%s'", cmd_argv[0]); + rval = 1; + } + } else + rval = 0; + free(line); + if (rval < 0) + return rval; + if (rval) + warnx("rval was %d", rval); + } + el_end(elptr); + history_end(hist); + return rval; } static ino_t ocurrent; #define GETINUM(ac,inum) inum = strtoul(argv[ac], &cp, 0); \ - if (inum < ROOTINO || inum > maxino || cp == argv[ac] || *cp != '\0' ) { \ - printf("inode %d out of range; range is [%d,%d]\n", \ - inum, ROOTINO, maxino); \ - return 1; \ - } + if (inum < ROOTINO || inum > maxino || cp == argv[ac] || *cp != '\0' ) { \ + printf("inode %d out of range; range is [%d,%d]\n", \ + inum, ROOTINO, maxino); \ + return 1; \ + } /* * Focus on given inode number */ CMDFUNCSTART(focus) { - ino_t inum; - char *cp; + ino_t inum; + char *cp; - GETINUM(1,inum); - curinode = ginode(inum); - ocurrent = curinum; - curinum = inum; - printactive(); - return 0; + GETINUM(1,inum); + curinode = ginode(inum); + ocurrent = curinum; + curinum = inum; + printactive(); + return 0; } CMDFUNCSTART(back) { - curinum = ocurrent; - curinode = ginode(curinum); - printactive(); - return 0; + curinum = ocurrent; + curinode = ginode(curinum); + printactive(); + return 0; } CMDFUNCSTART(zapi) { - ino_t inum; - struct dinode *dp; - char *cp; + ino_t inum; + struct dinode *dp; + char *cp; - GETINUM(1,inum); - dp = ginode(inum); - clearinode(dp); - inodirty(); - if (curinode) /* re-set after potential change */ - curinode = ginode(curinum); - return 0; + GETINUM(1,inum); + dp = ginode(inum); + clearinode(dp); + inodirty(); + if (curinode) /* re-set after potential change */ + curinode = ginode(curinum); + return 0; } CMDFUNCSTART(active) { - printactive(); - return 0; + printactive(); + return 0; } CMDFUNCSTART(quit) { - return -1; + return -1; } CMDFUNCSTART(uplink) { - if (!checkactive()) - return 1; - printf("inode %d link count now %d\n", curinum, ++curinode->di_nlink); - inodirty(); - return 0; + if (!checkactive()) + return 1; + printf("inode %d link count now %d\n", curinum, ++curinode->di_nlink); + inodirty(); + return 0; } CMDFUNCSTART(downlink) { - if (!checkactive()) - return 1; - printf("inode %d link count now %d\n", curinum, --curinode->di_nlink); - inodirty(); - return 0; + if (!checkactive()) + return 1; + printf("inode %d link count now %d\n", curinum, --curinode->di_nlink); + inodirty(); + return 0; } static const char *typename[] = { - "unknown", - "fifo", - "char special", - "unregistered #3", - "directory", - "unregistered #5", - "blk special", - "unregistered #7", - "regular", - "unregistered #9", - "symlink", - "unregistered #11", - "socket", - "unregistered #13", - "whiteout", + "unknown", + "fifo", + "char special", + "unregistered #3", + "directory", + "unregistered #5", + "blk special", + "unregistered #7", + "regular", + "unregistered #9", + "symlink", + "unregistered #11", + "socket", + "unregistered #13", + "whiteout", }; static int slot; static int -scannames(idesc) - struct inodesc *idesc; +scannames(struct inodesc *idesc) { struct direct *dirp = idesc->id_dirp; printf("slot %d ino %d reclen %d: %s, `%.*s'\n", - slot++, dirp->d_ino, dirp->d_reclen, typename[dirp->d_type], - dirp->d_namlen, dirp->d_name); + slot++, dirp->d_ino, dirp->d_reclen, typename[dirp->d_type], + dirp->d_namlen, dirp->d_name); return (KEEPON); } CMDFUNCSTART(ls) { - struct inodesc idesc; - checkactivedir(); /* let it go on anyway */ + struct inodesc idesc; + checkactivedir(); /* let it go on anyway */ - slot = 0; - idesc.id_number = curinum; - idesc.id_func = scannames; - idesc.id_type = DATA; - idesc.id_fix = IGNORE; - ckinode(curinode, &idesc); - curinode = ginode(curinum); + slot = 0; + idesc.id_number = curinum; + idesc.id_func = scannames; + idesc.id_type = DATA; + idesc.id_fix = IGNORE; + ckinode(curinode, &idesc); + curinode = ginode(curinum); - return 0; + return 0; } static int -dolookup(name) - char *name; -{ - struct inodesc idesc; - - if (!checkactivedir()) - return 0; - idesc.id_number = curinum; - idesc.id_func = findino; - idesc.id_name = name; - idesc.id_type = DATA; - idesc.id_fix = IGNORE; - if (ckinode(curinode, &idesc) & FOUND) { - curinum = idesc.id_parent; - curinode = ginode(curinum); - printactive(); - return 1; - } else { - warnx("name `%s' not found in current inode directory", name); - return 0; - } +dolookup(char *name) +{ + struct inodesc idesc; + + if (!checkactivedir()) + return 0; + idesc.id_number = curinum; + idesc.id_func = findino; + idesc.id_name = name; + idesc.id_type = DATA; + idesc.id_fix = IGNORE; + if (ckinode(curinode, &idesc) & FOUND) { + curinum = idesc.id_parent; + curinode = ginode(curinum); + printactive(); + return 1; + } else { + warnx("name `%s' not found in current inode directory", name); + return 0; + } } CMDFUNCSTART(focusname) { - char *p, *val; + char *p, *val; - if (!checkactive()) - return 1; + if (!checkactive()) + return 1; - ocurrent = curinum; + ocurrent = curinum; - if (argv[1][0] == '/') { - curinum = ROOTINO; - curinode = ginode(ROOTINO); - } else { - if (!checkactivedir()) - return 1; - } - for (p = argv[1]; p != NULL;) { - while ((val = strsep(&p, "/")) != NULL && *val == '\0'); - if (val) { - printf("component `%s': ", val); - fflush(stdout); - if (!dolookup(val)) { - curinode = ginode(curinum); - return(1); - } + if (argv[1][0] == '/') { + curinum = ROOTINO; + curinode = ginode(ROOTINO); + } else { + if (!checkactivedir()) + return 1; } - } - return 0; + for (p = argv[1]; p != NULL;) { + while ((val = strsep(&p, "/")) != NULL && *val == '\0'); + if (val) { + printf("component `%s': ", val); + fflush(stdout); + if (!dolookup(val)) { + curinode = ginode(curinum); + return(1); + } + } + } + return 0; } CMDFUNCSTART(ln) { - ino_t inum; - int rval; - char *cp; + ino_t inum; + int rval; + char *cp; - GETINUM(1,inum); + GETINUM(1,inum); - if (!checkactivedir()) - return 1; - rval = makeentry(curinum, inum, argv[2]); - if (rval) - printf("Ino %d entered as `%s'\n", inum, argv[2]); - else - printf("could not enter name? weird.\n"); - curinode = ginode(curinum); - return rval; + if (!checkactivedir()) + return 1; + rval = makeentry(curinum, inum, argv[2]); + if (rval) + printf("Ino %d entered as `%s'\n", inum, argv[2]); + else + printf("could not enter name? weird.\n"); + curinode = ginode(curinum); + return rval; } CMDFUNCSTART(rm) { - int rval; + int rval; - if (!checkactivedir()) - return 1; - rval = changeino(curinum, argv[1], 0); - if (rval & ALTERED) { - printf("Name `%s' removed\n", argv[1]); - return 0; - } else { - printf("could not remove name? weird.\n"); - return 1; - } + if (!checkactivedir()) + return 1; + rval = changeino(curinum, argv[1], 0); + if (rval & ALTERED) { + printf("Name `%s' removed\n", argv[1]); + return 0; + } else { + printf("could not remove name? weird.\n"); + return 1; + } } static long slotcount, desired; static int -chinumfunc(idesc) - struct inodesc *idesc; +chinumfunc(struct inodesc *idesc) { struct direct *dirp = idesc->id_dirp; @@ -523,379 +518,378 @@ chinumfunc(idesc) CMDFUNCSTART(chinum) { - char *cp; - ino_t inum; - struct inodesc idesc; - - slotcount = 0; - if (!checkactivedir()) - return 1; - GETINUM(2,inum); + char *cp; + ino_t inum; + struct inodesc idesc; - desired = strtol(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' || desired < 0) { - printf("invalid slot number `%s'\n", argv[1]); - return 1; - } + slotcount = 0; + if (!checkactivedir()) + return 1; + GETINUM(2,inum); - idesc.id_number = curinum; - idesc.id_func = chinumfunc; - idesc.id_fix = IGNORE; - idesc.id_type = DATA; - idesc.id_parent = inum; /* XXX convenient hiding place */ + desired = strtol(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' || desired < 0) { + printf("invalid slot number `%s'\n", argv[1]); + return 1; + } - if (ckinode(curinode, &idesc) & FOUND) - return 0; - else { - warnx("no %sth slot in current directory", argv[1]); - return 1; - } + idesc.id_number = curinum; + idesc.id_func = chinumfunc; + idesc.id_fix = IGNORE; + idesc.id_type = DATA; + idesc.id_parent = inum; /* XXX convenient hiding place */ + + if (ckinode(curinode, &idesc) & FOUND) + return 0; + else { + warnx("no %sth slot in current directory", argv[1]); + return 1; + } } static int -chnamefunc(idesc) - struct inodesc *idesc; +chnamefunc(struct inodesc *idesc) { struct direct *dirp = idesc->id_dirp; struct direct testdir; if (slotcount++ == desired) { - /* will name fit? */ - testdir.d_namlen = strlen(idesc->id_name); - if (DIRSIZ(NEWDIRFMT, &testdir) <= dirp->d_reclen) { - dirp->d_namlen = testdir.d_namlen; - strlcpy(dirp->d_name, idesc->id_name, sizeof dirp->d_name); - return STOP|ALTERED|FOUND; - } else - return STOP|FOUND; /* won't fit, so give up */ + /* will name fit? */ + testdir.d_namlen = strlen(idesc->id_name); + if (DIRSIZ(NEWDIRFMT, &testdir) <= dirp->d_reclen) { + dirp->d_namlen = testdir.d_namlen; + strlcpy(dirp->d_name, idesc->id_name, sizeof dirp->d_name); + return STOP|ALTERED|FOUND; + } else + return STOP|FOUND; /* won't fit, so give up */ } return KEEPON; } CMDFUNCSTART(chname) { - int rval; - char *cp; - struct inodesc idesc; - - slotcount = 0; - if (!checkactivedir()) - return 1; + int rval; + char *cp; + struct inodesc idesc; - desired = strtoul(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0') { - printf("invalid slot number `%s'\n", argv[1]); - return 1; - } + slotcount = 0; + if (!checkactivedir()) + return 1; - idesc.id_number = curinum; - idesc.id_func = chnamefunc; - idesc.id_fix = IGNORE; - idesc.id_type = DATA; - idesc.id_name = argv[2]; + desired = strtoul(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0') { + printf("invalid slot number `%s'\n", argv[1]); + return 1; + } - rval = ckinode(curinode, &idesc); - if ((rval & (FOUND|ALTERED)) == (FOUND|ALTERED)) - return 0; - else if (rval & FOUND) { - warnx("new name `%s' does not fit in slot %s", argv[2], argv[1]); - return 1; - } else { - warnx("no %sth slot in current directory", argv[1]); - return 1; - } + idesc.id_number = curinum; + idesc.id_func = chnamefunc; + idesc.id_fix = IGNORE; + idesc.id_type = DATA; + idesc.id_name = argv[2]; + + rval = ckinode(curinode, &idesc); + if ((rval & (FOUND|ALTERED)) == (FOUND|ALTERED)) + return 0; + else if (rval & FOUND) { + warnx("new name `%s' does not fit in slot %s", argv[2], argv[1]); + return 1; + } else { + warnx("no %sth slot in current directory", argv[1]); + return 1; + } } static struct typemap { - const char *typename; - int typebits; + const char *typename; + int typebits; } typenamemap[] = { - {"file", IFREG}, - {"dir", IFDIR}, - {"socket", IFSOCK}, - {"fifo", IFIFO}, + {"file", IFREG}, + {"dir", IFDIR}, + {"socket", IFSOCK}, + {"fifo", IFIFO}, }; CMDFUNCSTART(newtype) { - int type; - struct typemap *tp; - - if (!checkactive()) - return 1; - type = curinode->di_mode & IFMT; - for (tp = typenamemap; - tp < &typenamemap[sizeof(typemap)/sizeof(*typemap)]; - tp++) { - if (!strcmp(argv[1], tp->typename)) { - printf("setting type to %s\n", tp->typename); - type = tp->typebits; - break; + int type; + struct typemap *tp; + + if (!checkactive()) + return 1; + type = curinode->di_mode & IFMT; + for (tp = typenamemap; + tp < &typenamemap[sizeof(typemap)/sizeof(*typemap)]; + tp++) { + if (!strcmp(argv[1], tp->typename)) { + printf("setting type to %s\n", tp->typename); + type = tp->typebits; + break; + } + } + if (tp == &typenamemap[sizeof(typemap)/sizeof(*typemap)]) { + warnx("type `%s' not known", argv[1]); + warnx("try one of `file', `dir', `socket', `fifo'"); + return 1; } - } - if (tp == &typenamemap[sizeof(typemap)/sizeof(*typemap)]) { - warnx("type `%s' not known", argv[1]); - warnx("try one of `file', `dir', `socket', `fifo'"); - return 1; - } - curinode->di_mode &= ~IFMT; - curinode->di_mode |= type; - inodirty(); - printactive(); - return 0; + curinode->di_mode &= ~IFMT; + curinode->di_mode |= type; + inodirty(); + printactive(); + return 0; } CMDFUNCSTART(chmode) { - int rval = 1; - long modebits; - char *cp; + int rval = 1; + long modebits; + char *cp; - if (!checkactive()) - return 1; + if (!checkactive()) + return 1; - modebits = strtol(argv[1], &cp, 8); - if (cp == argv[1] || *cp != '\0' ) { - warnx("bad modebits `%s'", argv[1]); - return 1; - } + modebits = strtol(argv[1], &cp, 8); + if (cp == argv[1] || *cp != '\0' ) { + warnx("bad modebits `%s'", argv[1]); + return 1; + } - curinode->di_mode &= ~07777; - curinode->di_mode |= modebits; - inodirty(); - printactive(); - return rval; + curinode->di_mode &= ~07777; + curinode->di_mode |= modebits; + inodirty(); + printactive(); + return rval; } CMDFUNCSTART(chlen) { - int rval = 1; - long len; - char *cp; + int rval = 1; + long len; + char *cp; - if (!checkactive()) - return 1; + if (!checkactive()) + return 1; - len = strtol(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' || len < 0) { - warnx("bad length '%s'", argv[1]); - return 1; - } + len = strtol(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' || len < 0) { + warnx("bad length '%s'", argv[1]); + return 1; + } - curinode->di_size = len; - inodirty(); - printactive(); - return rval; + curinode->di_size = len; + inodirty(); + printactive(); + return rval; } CMDFUNCSTART(chaflags) { - int rval = 1; - u_long flags; - char *cp; + int rval = 1; + u_long flags; + char *cp; - if (!checkactive()) - return 1; + if (!checkactive()) + return 1; - flags = strtoul(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' ) { - warnx("bad flags `%s'", argv[1]); - return 1; - } + flags = strtoul(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' ) { + warnx("bad flags `%s'", argv[1]); + return 1; + } - if (flags > UINT_MAX) { - warnx("flags set beyond 32-bit range of field (%lx)", flags); - return(1); - } - curinode->di_flags = flags; - inodirty(); - printactive(); - return rval; + if (flags > UINT_MAX) { + warnx("flags set beyond 32-bit range of field (%lx)", flags); + return(1); + } + curinode->di_flags = flags; + inodirty(); + printactive(); + return rval; } CMDFUNCSTART(chgen) { - int rval = 1; - long gen; - char *cp; + int rval = 1; + long gen; + char *cp; - if (!checkactive()) - return 1; + if (!checkactive()) + return 1; - gen = strtol(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' ) { - warnx("bad gen `%s'", argv[1]); - return 1; - } + gen = strtol(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' ) { + warnx("bad gen `%s'", argv[1]); + return 1; + } - if (gen > INT_MAX || gen < INT_MIN) { - warnx("gen set beyond 32-bit range of field (%lx)", gen); - return(1); - } - curinode->di_gen = gen; - inodirty(); - printactive(); - return rval; + if (gen > INT_MAX || gen < INT_MIN) { + warnx("gen set beyond 32-bit range of field (%lx)", gen); + return(1); + } + curinode->di_gen = gen; + inodirty(); + printactive(); + return rval; } CMDFUNCSTART(linkcount) { - int rval = 1; - int lcnt; - char *cp; + int rval = 1; + int lcnt; + char *cp; - if (!checkactive()) - return 1; + if (!checkactive()) + return 1; - lcnt = strtol(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' ) { - warnx("bad link count `%s'", argv[1]); - return 1; - } - if (lcnt > USHRT_MAX || lcnt < 0) { - warnx("max link count is %d", USHRT_MAX); - return 1; - } + lcnt = strtol(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' ) { + warnx("bad link count `%s'", argv[1]); + return 1; + } + if (lcnt > USHRT_MAX || lcnt < 0) { + warnx("max link count is %d", USHRT_MAX); + return 1; + } - curinode->di_nlink = lcnt; - inodirty(); - printactive(); - return rval; + curinode->di_nlink = lcnt; + inodirty(); + printactive(); + return rval; } CMDFUNCSTART(chowner) { - int rval = 1; - uid_t uid; - char *cp; - struct passwd *pwd; - - if (!checkactive()) - return 1; - - uid = strtoul(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' ) { - /* try looking up name */ - if ((pwd = getpwnam(argv[1]))) { - uid = pwd->pw_uid; - } else { - warnx("bad uid `%s'", argv[1]); - return 1; + int rval = 1; + uid_t uid; + char *cp; + struct passwd *pwd; + + if (!checkactive()) + return 1; + + uid = strtoul(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' ) { + /* try looking up name */ + if ((pwd = getpwnam(argv[1]))) { + uid = pwd->pw_uid; + } else { + warnx("bad uid `%s'", argv[1]); + return 1; + } } - } - curinode->di_uid = uid; - inodirty(); - printactive(); - return rval; + curinode->di_uid = uid; + inodirty(); + printactive(); + return rval; } CMDFUNCSTART(chgroup) { - int rval = 1; - gid_t gid; - char *cp; - struct group *grp; - - if (!checkactive()) - return 1; - - gid = strtoul(argv[1], &cp, 0); - if (cp == argv[1] || *cp != '\0' ) { - if ((grp = getgrnam(argv[1]))) { - gid = grp->gr_gid; - } else { - warnx("bad gid `%s'", argv[1]); - return 1; + int rval = 1; + gid_t gid; + char *cp; + struct group *grp; + + if (!checkactive()) + return 1; + + gid = strtoul(argv[1], &cp, 0); + if (cp == argv[1] || *cp != '\0' ) { + if ((grp = getgrnam(argv[1]))) { + gid = grp->gr_gid; + } else { + warnx("bad gid `%s'", argv[1]); + return 1; + } } - } - curinode->di_gid = gid; - inodirty(); - printactive(); - return rval; + curinode->di_gid = gid; + inodirty(); + printactive(); + return rval; } static int -dotime(name, rsec, rnsec) - char *name; - int32_t *rsec, *rnsec; -{ - char *p, *val; - struct tm t; - int32_t sec; - int32_t nsec; - p = strchr(name, '.'); - if (p) { - *p = '\0'; - nsec = strtoul(++p, &val, 0); - if (val == p || *val != '\0' || nsec >= 1000000000 || nsec < 0) { - warnx("invalid nanoseconds"); - goto badformat; - } - } else - nsec = 0; - if (strlen(name) != 14) { +dotime(char *name, int32_t *rsec, int32_t *rnsec) +{ + char *p, *val; + struct tm t; + int32_t sec; + int32_t nsec; + + p = strchr(name, '.'); + if (p) { + *p = '\0'; + nsec = strtoul(++p, &val, 0); + if (val == p || *val != '\0' || nsec >= 1000000000 || nsec < 0) { + warnx("invalid nanoseconds"); + goto badformat; + } + } else + nsec = 0; + + if (strlen(name) != 14) { badformat: - warnx("date format: YYYYMMDDHHMMSS[.nsec]"); - return 1; - } + warnx("date format: YYYYMMDDHHMMSS[.nsec]"); + return 1; + } - for (p = name; *p; p++) - if (*p < '0' || *p > '9') - goto badformat; + for (p = name; *p; p++) + if (*p < '0' || *p > '9') + goto badformat; - p = name; + p = name; #define VAL() ((*p++) - '0') - t.tm_year = VAL(); - t.tm_year = VAL() + t.tm_year * 10; - t.tm_year = VAL() + t.tm_year * 10; - t.tm_year = VAL() + t.tm_year * 10 - 1900; - t.tm_mon = VAL(); - t.tm_mon = VAL() + t.tm_mon * 10 - 1; - t.tm_mday = VAL(); - t.tm_mday = VAL() + t.tm_mday * 10; - t.tm_hour = VAL(); - t.tm_hour = VAL() + t.tm_hour * 10; - t.tm_min = VAL(); - t.tm_min = VAL() + t.tm_min * 10; - t.tm_sec = VAL(); - t.tm_sec = VAL() + t.tm_sec * 10; - t.tm_isdst = -1; - - sec = mktime(&t); - if (sec == -1) { - warnx("date/time out of range"); - return 1; - } - *rsec = sec; - *rnsec = nsec; - return 0; + t.tm_year = VAL(); + t.tm_year = VAL() + t.tm_year * 10; + t.tm_year = VAL() + t.tm_year * 10; + t.tm_year = VAL() + t.tm_year * 10 - 1900; + t.tm_mon = VAL(); + t.tm_mon = VAL() + t.tm_mon * 10 - 1; + t.tm_mday = VAL(); + t.tm_mday = VAL() + t.tm_mday * 10; + t.tm_hour = VAL(); + t.tm_hour = VAL() + t.tm_hour * 10; + t.tm_min = VAL(); + t.tm_min = VAL() + t.tm_min * 10; + t.tm_sec = VAL(); + t.tm_sec = VAL() + t.tm_sec * 10; + t.tm_isdst = -1; + + sec = mktime(&t); + if (sec == -1) { + warnx("date/time out of range"); + return 1; + } + *rsec = sec; + *rnsec = nsec; + return 0; } CMDFUNCSTART(chmtime) { - if (dotime(argv[1], &curinode->di_mtime, &curinode->di_mtimensec)) - return 1; - inodirty(); - printactive(); - return 0; + if (dotime(argv[1], &curinode->di_mtime, &curinode->di_mtimensec)) + return 1; + inodirty(); + printactive(); + return 0; } CMDFUNCSTART(chatime) { - if (dotime(argv[1], &curinode->di_atime, &curinode->di_atimensec)) - return 1; - inodirty(); - printactive(); - return 0; + if (dotime(argv[1], &curinode->di_atime, &curinode->di_atimensec)) + return 1; + inodirty(); + printactive(); + return 0; } CMDFUNCSTART(chctime) { - if (dotime(argv[1], &curinode->di_ctime, &curinode->di_ctimensec)) - return 1; - inodirty(); - printactive(); - return 0; + if (dotime(argv[1], &curinode->di_ctime, &curinode->di_ctimensec)) + return 1; + inodirty(); + printactive(); + return 0; } diff --git a/sbin/fsdb/fsdbutil.c b/sbin/fsdb/fsdbutil.c index 592b61a5977..2212df43368 100644 --- a/sbin/fsdb/fsdbutil.c +++ b/sbin/fsdb/fsdbutil.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fsdbutil.c,v 1.8 2002/06/09 08:13:06 todd Exp $ */ +/* $OpenBSD: fsdbutil.c,v 1.9 2003/06/11 06:22:13 deraadt Exp $ */ /* $NetBSD: fsdbutil.c,v 1.5 1996/09/28 19:30:37 christos Exp $ */ /*- @@ -38,7 +38,7 @@ */ #ifndef lint -static char rcsid[] = "$OpenBSD: fsdbutil.c,v 1.8 2002/06/09 08:13:06 todd Exp $"; +static char rcsid[] = "$OpenBSD: fsdbutil.c,v 1.9 2003/06/11 06:22:13 deraadt Exp $"; #endif /* not lint */ #include <sys/types.h> @@ -63,156 +63,150 @@ static char rcsid[] = "$OpenBSD: fsdbutil.c,v 1.8 2002/06/09 08:13:06 todd Exp $ #include "fsck.h" char ** -crack(line, argc) - char *line; - int *argc; +crack(char *line, int *argc) { - static char *argv[8]; - int i; - char *p, *val; - for (p = line, i = 0; p != NULL && i < 8; i++) { - while ((val = strsep(&p, " \t\n")) != NULL && *val == '\0') - /**/; - if (val) - argv[i] = val; - else - break; - } - *argc = i; - return argv; + static char *argv[8]; + int i; + char *p, *val; + + for (p = line, i = 0; p != NULL && i < 8; i++) { + while ((val = strsep(&p, " \t\n")) != NULL && *val == '\0') + /**/; + if (val) + argv[i] = val; + else + break; + } + *argc = i; + return argv; } int -argcount(cmdp, argc, argv) - struct cmdtable *cmdp; - int argc; - char *argv[]; +argcount(struct cmdtable *cmdp, int argc, char *argv[]) { - if (cmdp->minargc == cmdp->maxargc) - warnx("command `%s' takes %u arguments", cmdp->cmd, cmdp->minargc-1); - else - warnx("command `%s' takes from %u to %u arguments", - cmdp->cmd, cmdp->minargc-1, cmdp->maxargc-1); - - warnx("usage: %s: %s", cmdp->cmd, cmdp->helptxt); - return 1; + if (cmdp->minargc == cmdp->maxargc) + warnx("command `%s' takes %u arguments", cmdp->cmd, cmdp->minargc-1); + else + warnx("command `%s' takes from %u to %u arguments", + cmdp->cmd, cmdp->minargc-1, cmdp->maxargc-1); + warnx("usage: %s: %s", cmdp->cmd, cmdp->helptxt); + return 1; } void -printstat(cp, inum, dp) - const char *cp; - ino_t inum; - struct dinode *dp; +printstat(const char *cp, ino_t inum, struct dinode *dp) { - struct group *grp; - struct passwd *pw; - time_t t; - char *p; - - printf("%s: ", cp); - switch (dp->di_mode & IFMT) { - case IFDIR: - puts("directory"); - break; - case IFREG: - puts("regular file"); - break; - case IFBLK: - printf("block special (%d,%d)", - major(dp->di_rdev), minor(dp->di_rdev)); - break; - case IFCHR: - printf("character special (%d,%d)", - major(dp->di_rdev), minor(dp->di_rdev)); - break; - case IFLNK: - fputs("symlink",stdout); - if (dp->di_size > 0 && dp->di_size < MAXSYMLINKLEN && - dp->di_blocks == 0) - printf(" to `%.*s'\n", (int) dp->di_size, (char *)dp->di_shortlink); + struct group *grp; + struct passwd *pw; + time_t t; + char *p; + + printf("%s: ", cp); + switch (dp->di_mode & IFMT) { + case IFDIR: + puts("directory"); + break; + case IFREG: + puts("regular file"); + break; + case IFBLK: + printf("block special (%d,%d)", + major(dp->di_rdev), minor(dp->di_rdev)); + break; + case IFCHR: + printf("character special (%d,%d)", + major(dp->di_rdev), minor(dp->di_rdev)); + break; + case IFLNK: + fputs("symlink",stdout); + if (dp->di_size > 0 && dp->di_size < MAXSYMLINKLEN && + dp->di_blocks == 0) + printf(" to `%.*s'\n", (int) dp->di_size, + (char *)dp->di_shortlink); + else + putchar('\n'); + break; + case IFSOCK: + puts("socket"); + break; + case IFIFO: + puts("fifo"); + break; + } + + printf("I=%u MODE=%o SIZE=%llu", inum, dp->di_mode, dp->di_size); + t = dp->di_mtime; + p = ctime(&t); + printf("\n\tMTIME=%15.15s %4.4s [%d nsec]", &p[4], &p[20], + dp->di_mtimensec); + t = dp->di_ctime; + p = ctime(&t); + printf("\n\tCTIME=%15.15s %4.4s [%d nsec]", &p[4], &p[20], + dp->di_ctimensec); + t = dp->di_atime; + p = ctime(&t); + printf("\n\tATIME=%15.15s %4.4s [%d nsec]\n", &p[4], &p[20], + dp->di_atimensec); + + if ((pw = getpwuid(dp->di_uid))) + printf("OWNER=%s ", pw->pw_name); + else + printf("OWNUID=%u ", dp->di_uid); + if ((grp = getgrgid(dp->di_gid))) + printf("GRP=%s ", grp->gr_name); else - putchar('\n'); - break; - case IFSOCK: - puts("socket"); - break; - case IFIFO: - puts("fifo"); - break; - } - printf("I=%u MODE=%o SIZE=%llu", inum, dp->di_mode, dp->di_size); - t = dp->di_mtime; - p = ctime(&t); - printf("\n\tMTIME=%15.15s %4.4s [%d nsec]", &p[4], &p[20], - dp->di_mtimensec); - t = dp->di_ctime; - p = ctime(&t); - printf("\n\tCTIME=%15.15s %4.4s [%d nsec]", &p[4], &p[20], - dp->di_ctimensec); - t = dp->di_atime; - p = ctime(&t); - printf("\n\tATIME=%15.15s %4.4s [%d nsec]\n", &p[4], &p[20], - dp->di_atimensec); - - if ((pw = getpwuid(dp->di_uid))) - printf("OWNER=%s ", pw->pw_name); - else - printf("OWNUID=%u ", dp->di_uid); - if ((grp = getgrgid(dp->di_gid))) - printf("GRP=%s ", grp->gr_name); - else - printf("GID=%u ", dp->di_gid); - - printf("LINKCNT=%hd FLAGS=%#x BLKCNT=%x GEN=%x\n", dp->di_nlink, dp->di_flags, - dp->di_blocks, dp->di_gen); + printf("GID=%u ", dp->di_gid); + + printf("LINKCNT=%hd FLAGS=%#x BLKCNT=%x GEN=%x\n", dp->di_nlink, + dp->di_flags, dp->di_blocks, dp->di_gen); } int -checkactive() +checkactive(void) { - if (!curinode) { - warnx("no current inode"); - return 0; - } - return 1; + if (!curinode) { + warnx("no current inode"); + return 0; + } + return 1; } int -checkactivedir() +checkactivedir(void) { - if (!curinode) { - warnx("no current inode"); - return 0; - } - if ((curinode->di_mode & IFMT) != IFDIR) { - warnx("inode %d not a directory", curinum); - return 0; - } - return 1; + if (!curinode) { + warnx("no current inode"); + return 0; + } + if ((curinode->di_mode & IFMT) != IFDIR) { + warnx("inode %d not a directory", curinum); + return 0; + } + return 1; } int -printactive() +printactive(void) { - if (!checkactive()) - return 1; - switch (curinode->di_mode & IFMT) { - case IFDIR: - case IFREG: - case IFBLK: - case IFCHR: - case IFLNK: - case IFSOCK: - case IFIFO: - printstat("current inode", curinum, curinode); - break; - case 0: - printf("current inode %d: unallocated inode\n", curinum); - break; - default: - printf("current inode %d: screwy itype 0%o (mode 0%o)?\n", - curinum, curinode->di_mode & IFMT, curinode->di_mode); - break; - } - return 0; + if (!checkactive()) + return 1; + switch (curinode->di_mode & IFMT) { + case IFDIR: + case IFREG: + case IFBLK: + case IFCHR: + case IFLNK: + case IFSOCK: + case IFIFO: + printstat("current inode", curinum, curinode); + break; + case 0: + printf("current inode %d: unallocated inode\n", curinum); + break; + default: + printf("current inode %d: screwy itype 0%o (mode 0%o)?\n", + curinum, curinode->di_mode & IFMT, curinode->di_mode); + break; + } + return 0; } |