diff options
author | 2014-03-10 21:40:58 +0000 | |
---|---|---|
committer | 2014-03-10 21:40:58 +0000 | |
commit | 87dc51448f11105eb5507d1109589843b83513de (patch) | |
tree | 7653fef0d79dd0820312ca7769ee678dd2e2d8d8 | |
parent | Support BUS_DMA_NOCACHE in bus_dma(9). Memory allocations done with (diff) | |
download | wireguard-openbsd-87dc51448f11105eb5507d1109589843b83513de.tar.xz wireguard-openbsd-87dc51448f11105eb5507d1109589843b83513de.zip |
No need to pass the name of the command to the function that is
implementing that command, a pointer to the command arguments is the
only thing needed. No need to have a pointer to the command table in
every command, since there is only one table. No need for shiney new
stack space for every command name and arguments parsed, since we
don't recurse we can just use static memory.
No intentional functional change.
-rw-r--r-- | sbin/fdisk/cmd.c | 60 | ||||
-rw-r--r-- | sbin/fdisk/cmd.h | 43 | ||||
-rw-r--r-- | sbin/fdisk/misc.c | 12 | ||||
-rw-r--r-- | sbin/fdisk/misc.h | 4 | ||||
-rw-r--r-- | sbin/fdisk/user.c | 24 |
5 files changed, 66 insertions, 77 deletions
diff --git a/sbin/fdisk/cmd.c b/sbin/fdisk/cmd.c index a6bdb91a89e..2316113facb 100644 --- a/sbin/fdisk/cmd.c +++ b/sbin/fdisk/cmd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd.c,v 1.62 2014/03/09 22:25:06 krw Exp $ */ +/* $OpenBSD: cmd.c,v 1.63 2014/03/10 21:40:58 krw Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -38,7 +38,7 @@ #include "cmd.h" int -Xreinit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xreinit(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { struct dos_mbr dos_mbr; @@ -52,7 +52,7 @@ Xreinit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* Tell em we did something */ printf("In memory copy is initialized to:\n"); printf("Offset: %d\t", offset); - MBR_print(mbr, cmd->args); + MBR_print(mbr, args); printf("Use 'write' to update disk.\n"); return (CMD_DIRTY); @@ -60,7 +60,7 @@ Xreinit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xdisk(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xdisk(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { int maxcyl = 1024; @@ -68,7 +68,7 @@ Xdisk(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, int maxsec = 63; /* Print out disk info */ - DISK_printmetrics(disk, cmd->args); + DISK_printmetrics(disk, args); #if defined (__powerpc__) || defined (__mips__) maxcyl = 9999999; @@ -94,7 +94,7 @@ Xdisk(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xswap(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xswap(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { const char *errstr; @@ -104,7 +104,7 @@ Xswap(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, ret = CMD_CONT; - to = cmd->args; + to = args; from = strsep(&to, " \t"); if (to == NULL) { @@ -139,22 +139,22 @@ Xswap(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xedit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xedit(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { const char *errstr; int pn, num, ret; struct prt *pp; - pn = (int)strtonum(cmd->args, 0, 3, &errstr); + pn = (int)strtonum(args, 0, 3, &errstr); if (errstr) { - printf("partition number is %s: %s\n", errstr, cmd->args); + printf("partition number is %s: %s\n", errstr, args); return (CMD_CONT); } pp = &mbr->part[pn]; /* Edit partition type */ - ret = Xsetpid(cmd, disk, mbr, tt, offset); + ret = Xsetpid(args, disk, mbr, tt, offset); #define EDIT(p, v, n, m) \ if ((num = ask_num(p, v, n, m)) != v) \ @@ -202,7 +202,7 @@ Xedit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xsetpid(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xsetpid(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { const char *errstr; @@ -211,9 +211,9 @@ Xsetpid(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, ret = CMD_CONT; - pn = (int)strtonum(cmd->args, 0, 3, &errstr); + pn = (int)strtonum(args, 0, 3, &errstr); if (errstr) { - printf("partition number is %s: %s\n", errstr, cmd->args); + printf("partition number is %s: %s\n", errstr, args); return (ret); } pp = &mbr->part[pn]; @@ -234,7 +234,7 @@ Xsetpid(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xselect(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xselect(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { const char *errstr; @@ -242,9 +242,9 @@ Xselect(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, int off; int pn; - pn = (int)strtonum(cmd->args, 0, 3, &errstr); + pn = (int)strtonum(args, 0, 3, &errstr); if (errstr) { - printf("partition number is %s: %s\n", errstr, cmd->args); + printf("partition number is %s: %s\n", errstr, args); return (CMD_CONT); } @@ -275,20 +275,20 @@ Xselect(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xprint(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xprint(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { - DISK_printmetrics(disk, cmd->args); + DISK_printmetrics(disk, args); printf("Offset: %d\t", offset); - MBR_print(mbr, cmd->args); + MBR_print(mbr, args); return (CMD_CONT); } /* ARGSUSED */ int -Xwrite(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xwrite(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { struct dos_mbr dos_mbr; @@ -324,7 +324,7 @@ Xwrite(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xquit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xquit(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { @@ -334,7 +334,7 @@ Xquit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xabort(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xabort(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { exit(0); @@ -346,7 +346,7 @@ Xabort(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xexit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xexit(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { @@ -356,13 +356,11 @@ Xexit(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xhelp(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xhelp(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { - struct cmd_table *cmd_table = cmd->table; int i; - /* Hmm, print out cmd_table here... */ for (i = 0; cmd_table[i].cmd != NULL; i++) printf("\t%s\t\t%s\n", cmd_table[i].cmd, cmd_table[i].help); return (CMD_CONT); @@ -370,7 +368,7 @@ Xhelp(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xupdate(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xupdate(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { @@ -383,14 +381,14 @@ Xupdate(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xflag(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xflag(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { const char *errstr; int i, pn = -1, val = -1; char *part, *flag; - flag = cmd->args; + flag = args; part = strsep(&flag, " \t"); pn = (int)strtonum(part, 0, 3, &errstr); @@ -425,7 +423,7 @@ Xflag(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, /* ARGSUSED */ int -Xmanual(struct cmd *cmd, struct disk *disk, struct mbr *mbr, struct mbr *tt, +Xmanual(char *args, struct disk *disk, struct mbr *mbr, struct mbr *tt, int offset) { char *pager = "/usr/bin/less"; diff --git a/sbin/fdisk/cmd.h b/sbin/fdisk/cmd.h index d0f07ee559f..62227efb9a6 100644 --- a/sbin/fdisk/cmd.h +++ b/sbin/fdisk/cmd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd.h,v 1.10 2014/03/07 21:56:13 krw Exp $ */ +/* $OpenBSD: cmd.h,v 1.11 2014/03/10 21:40:58 krw Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -42,36 +42,31 @@ /* Data types */ -struct cmd_table; struct cmd { - struct cmd_table *table; - char cmd[10]; - char args[100]; -}; - -struct cmd_table { char *cmd; - int (*fcn)(struct cmd *, struct disk *, struct mbr *, struct mbr *, + int (*fcn)(char *, struct disk *, struct mbr *, struct mbr *, int); char *help; }; +extern struct cmd cmd_table[]; + /* Prototypes */ -int Xreinit(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xdisk(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xmanual(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xedit(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xsetpid(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xselect(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xswap(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xprint(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xwrite(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xexit(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xquit(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xabort(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xhelp(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xflag(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); -int Xupdate(struct cmd *, struct disk *, struct mbr *, struct mbr *, int); +int Xreinit(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xdisk(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xmanual(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xedit(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xsetpid(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xselect(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xswap(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xprint(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xwrite(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xexit(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xquit(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xabort(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xhelp(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xflag(char *, struct disk *, struct mbr *, struct mbr *, int); +int Xupdate(char *, struct disk *, struct mbr *, struct mbr *, int); #endif /* _CMD_H */ diff --git a/sbin/fdisk/misc.c b/sbin/fdisk/misc.c index a1359472c11..f7f5ed25d78 100644 --- a/sbin/fdisk/misc.c +++ b/sbin/fdisk/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.34 2014/03/09 22:25:06 krw Exp $ */ +/* $OpenBSD: misc.c,v 1.35 2014/03/10 21:40:58 krw Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -62,9 +62,10 @@ unit_lookup(char *units) } int -ask_cmd(struct cmd *cmd) +ask_cmd(char **cmd, char **args) { - char lbuf[100], *cp, *buf; + static char lbuf[100]; + char *cp, *buf; size_t lbuflen; /* Get input */ @@ -79,9 +80,8 @@ ask_cmd(struct cmd *cmd) buf = &buf[strspn(buf, " \t")]; cp = &buf[strcspn(buf, " \t")]; *cp++ = '\0'; - strncpy(cmd->cmd, buf, sizeof(cmd->cmd)); - buf = &cp[strspn(cp, " \t")]; - strncpy(cmd->args, buf, sizeof(cmd->args)); + *cmd = buf; + *args = &cp[strspn(cp, " \t")]; return (0); } diff --git a/sbin/fdisk/misc.h b/sbin/fdisk/misc.h index 56c0e2d254b..e35f22d2d34 100644 --- a/sbin/fdisk/misc.h +++ b/sbin/fdisk/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.19 2014/03/07 21:56:13 krw Exp $ */ +/* $OpenBSD: misc.h,v 1.20 2014/03/10 21:40:58 krw Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -47,7 +47,7 @@ extern struct unit_type unit_types[]; /* Prototypes */ int unit_lookup(char *); -int ask_cmd(struct cmd *); +int ask_cmd(char **, char **); int ask_num(const char *, int, int, int); int ask_pid(int); int ask_yn(const char *); diff --git a/sbin/fdisk/user.c b/sbin/fdisk/user.c index dc7ec054385..57c578d4bea 100644 --- a/sbin/fdisk/user.c +++ b/sbin/fdisk/user.c @@ -1,4 +1,4 @@ -/* $OpenBSD: user.c,v 1.28 2014/03/09 22:25:06 krw Exp $ */ +/* $OpenBSD: user.c,v 1.29 2014/03/10 21:40:58 krw Exp $ */ /* * Copyright (c) 1997 Tobias Weingartner @@ -39,7 +39,7 @@ /* Our command table */ -static struct cmd_table cmd_table[] = { +struct cmd cmd_table[] = { {"help", Xhelp, "Command help list"}, {"manual", Xmanual, "Show entire OpenBSD man page for fdisk"}, {"reinit", Xreinit, "Re-initialize loaded MBR (to defaults)"}, @@ -86,15 +86,12 @@ USER_modify(struct disk *disk, struct mbr *tt, off_t offset, off_t reloff) static int editlevel; struct dos_mbr dos_mbr; struct mbr mbr; - struct cmd cmd; + char *cmd, *args; int i, st, fd, error; /* One level deeper */ editlevel += 1; - /* Set up command table pointer */ - cmd.table = cmd_table; - /* Read MBR & partition */ fd = DISK_open(disk->name, O_RDONLY); error = MBR_read(fd, offset, &dos_mbr); @@ -112,27 +109,26 @@ USER_modify(struct disk *disk, struct mbr *tt, off_t offset, off_t reloff) again: printf("fdisk:%c%d> ", (modified)?'*':' ', editlevel); fflush(stdout); - ask_cmd(&cmd); + ask_cmd(&cmd, &args); - if (cmd.cmd[0] == '\0') + if (cmd[0] == '\0') goto again; for (i = 0; cmd_table[i].cmd != NULL; i++) - if (strstr(cmd_table[i].cmd, cmd.cmd)==cmd_table[i].cmd) + if (strstr(cmd_table[i].cmd, cmd) == cmd_table[i].cmd) break; /* Quick hack to put in '?' == 'help' */ - if (!strcmp(cmd.cmd, "?")) + if (!strcmp(cmd, "?")) i = 0; /* Check for valid command */ if (cmd_table[i].cmd == NULL) { - printf("Invalid command '%s'. Try 'help'.\n", cmd.cmd); + printf("Invalid command '%s'. Try 'help'.\n", cmd); continue; - } else - strlcpy(cmd.cmd, cmd_table[i].cmd, sizeof cmd.cmd); + } /* Call function */ - st = cmd_table[i].fcn(&cmd, disk, &mbr, tt, offset); + st = cmd_table[i].fcn(args, disk, &mbr, tt, offset); /* Update status */ if (st == CMD_EXIT) |