summaryrefslogtreecommitdiffstats
path: root/sbin/vinum/commands.c
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>1999-05-02 08:01:21 +0000
committergrog <grog@FreeBSD.org>1999-05-02 08:01:21 +0000
commitc54171c955493d08e58e6a8575f92165e9cb3acb (patch)
treeb6e9eeb446101a7c6a3f38dc76fafac17d69b79d /sbin/vinum/commands.c
parent505f21361b81f16c72bf6e4b57e66f18f7bf6445 (diff)
downloadFreeBSD-src-c54171c955493d08e58e6a8575f92165e9cb3acb.zip
FreeBSD-src-c54171c955493d08e58e6a8575f92165e9cb3acb.tar.gz
vinum_create:
If no file name is specified, create one and edit it with the editor specified in the EDITOR environment variable, by default vi. vinum_help: Update. Fix typos in messages.
Diffstat (limited to 'sbin/vinum/commands.c')
-rw-r--r--sbin/vinum/commands.c154
1 files changed, 97 insertions, 57 deletions
diff --git a/sbin/vinum/commands.c b/sbin/vinum/commands.c
index 6bb5436..c183bfd 100644
--- a/sbin/vinum/commands.c
+++ b/sbin/vinum/commands.c
@@ -72,15 +72,42 @@ vinum_create(int argc, char *argv[], char *arg0[])
char commandline[BUFSIZE]; /* issue command from here */
struct _ioctl_reply *reply;
int ioctltype; /* for ioctl call */
-
- if (argc != 1) { /* wrong arg count */
+ char tempfile[PATH_MAX]; /* name of temp file for direct editing */
+ char *file; /* file to read */
+ FILE *tf; /* temp file */
+
+ if (argc == 0) { /* no args, */
+ char *editor; /* editor to start */
+ int status;
+
+ editor = getenv("EDITOR");
+ if (editor == NULL)
+ editor = "/usr/bin/vi";
+ sprintf(tempfile, "/var/tmp/" VINUMMOD ".create.%d", getpid()); /* create a temp file */
+ tf = fopen(tempfile, "w"); /* open it */
+ if (tf == NULL) {
+ fprintf(stderr, "Can't open %s: %s\n", argv[0], strerror(errno));
+ return;
+ }
+ printconfig(tf, "# "); /* and put the current config it */
+ fclose(tf);
+ sprintf(commandline, "%s %s", editor, tempfile); /* create an edit command */
+ status = system(commandline); /* do it */
+ if (status != 0) {
+ fprintf(stderr, "Can't edit config: status %d\n", status);
+ return;
+ }
+ file = tempfile;
+ } else if (argc == 1)
+ file = argv[0];
+ else {
fprintf(stderr, "Expecting 1 parameter, not %d\n", argc);
return;
}
reply = (struct _ioctl_reply *) &buffer;
- dfd = fopen(argv[0], "r");
+ dfd = fopen(file, "r");
if (dfd == NULL) { /* no go */
- fprintf(stderr, "Can't open %s: %s\n", argv[0], strerror(errno));
+ fprintf(stderr, "Can't open %s: %s\n", file, strerror(errno));
return;
}
if (ioctl(superdev, VINUM_STARTCONFIG, &force)) { /* can't get config? */
@@ -93,6 +120,8 @@ vinum_create(int argc, char *argv[], char *arg0[])
char *configline;
configline = fgets(buffer, BUFSIZE, dfd);
+ if (history)
+ fprintf(history, "%s", buffer);
if (configline == NULL) {
if (ferror(dfd))
@@ -342,6 +371,8 @@ vinum_init(int argc, char *argv[], char *arg0[])
long long offset; /* offset in subdisk */
long long sdsize; /* size of subdisk */
+ if (history)
+ fflush(history); /* don't let all the kids do it. */
for (plexindex = 0; plexindex < argc; plexindex++) {
plexno = find_object(argv[plexindex], &type); /* find the object */
if (plexno < 0)
@@ -1117,57 +1148,66 @@ vinum_help(int argc, char *argv[], char *argv0[])
char commands[] =
{
"COMMANDS\n"
- " create description-file\n"
- " Create a volume as described in description-file\n"
- " attach plex volume [rename]\n"
- " attach subdisk plex [offset] [rename]\n"
- " Attach a plex to a volume, or a subdisk to a plex.\n"
- " debug\n"
- " Cause the volume manager to enter the kernel debugger.\n"
- " detach [plex | subdisk]\n"
- " Detach a plex or subdisk from the volume or plex to which it is at-\n"
- " tached.\n"
- " info [-v]\n"
- " List information about volume manager state.\n"
- " init [-v]\n"
- " Initialize a plex by writing zeroes to all its subdisks.\n"
- " label volume\n"
- " Create a volume label\n"
- " list [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
- " List information about specified objects\n"
- " l [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
- " List information about specified objects (alternative to\n"
- " list command)\n"
- " ld [-r] [-s] [-v] [-V] [volume]\n"
- " List information about drives\n"
- " ls [-r] [-s] [-v] [-V] [subdisk]\n"
- " List information about subdisks\n"
- " lp [-r] [-s] [-v] [-V] [plex]\n"
- " List information about plexes\n"
- " lv [-r] [-s] [-v] [-V] [volume]\n"
- " List information about volumes\n"
- " makedev\n"
- " Remake the device nodes in /dev/vinum.\n"
- " read disk-partition\n"
- " Read the vinum configuration from the specified disk partition.\n"
- " rename [-r] [drive | subdisk | plex | volume] newname\n"
- " Change the name of the specified object.\n"
- " replace [subdisk | plex] newobject\n"
- " Replace the object with an identical other object. XXX not im-\n"
- " plemented yet.\n"
- " resetconfig\n"
- " Reset the complete vinum configuration.\n"
- " resetstats [-r] [volume | plex | subdisk]\n"
- " Reset statistisc counters for the specified objects, or for all\n"
- " objects if none are specified.\n"
- " rm [-f] [-r] volume | plex | subdisk\n"
- " Remove an object\n"
- " setdaemon options\n"
- " set the daemon options\n"
- " start [volume | plex | subdisk]\n"
- " Allow the system to access the objects\n"
- " stop [-f] [volume | plex | subdisk]\n"
- " Terminate access the objects\n"
+ "create [-f description-file]\n"
+ " Create a volume as described in description-file\n"
+ "attach plex volume [rename]\n"
+ "attach subdisk plex [offset] [rename]\n"
+ " Attach a plex to a volume, or a subdisk to a plex.\n"
+ "debug\n"
+ " Cause the volume manager to enter the kernel debugger.\n"
+ "debug flags\n"
+ " Set debugging flags.\n"
+ "detach [plex | subdisk]\n"
+ " Detach a plex or subdisk from the volume or plex to which it is\n"
+ " attached.\n"
+ "info [-v]\n"
+ " List information about volume manager state.\n"
+ "init [-v] [-w] plex\n"
+ " Initialize a plex by writing zeroes to all its subdisks.\n"
+ "label volume\n"
+ " Create a volume label\n"
+ "list [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
+ " List information about specified objects\n"
+ "l [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
+ " List information about specified objects (alternative to\n"
+ " list command)\n"
+ "ld [-r] [-s] [-v] [-V] [volume]\n"
+ " List information about drives\n"
+ "ls [-r] [-s] [-v] [-V] [subdisk]\n"
+ " List information about subdisks\n"
+ "lp [-r] [-s] [-v] [-V] [plex]\n"
+ " List information about plexes\n"
+ "lv [-r] [-s] [-v] [-V] [volume]\n"
+ " List information about volumes\n"
+ "printconfig [file]\n"
+ " Write a copy of the current configuration to file.\n"
+ "makedev\n"
+ " Remake the device nodes in /dev/vinum.\n"
+ "quit\n"
+ " Exit the vinum program when running in interactive mode. Nor-\n"
+ " mally this would be done by entering the EOF character.\n"
+ "read disk [disk...]\n"
+ " Read the vinum configuration from the specified disks.\n"
+ "rename [-r] [drive | subdisk | plex | volume] newname\n"
+ " Change the name of the specified object.\n"
+ "resetconfig\n"
+ " Reset the complete vinum configuration.\n"
+ "resetstats [-r] [volume | plex | subdisk]\n"
+ " Reset statistisc counters for the specified objects, or for all\n"
+ " objects if none are specified.\n"
+ "rm [-f] [-r] volume | plex | subdisk\n"
+ " Remove an object\n"
+ "saveconfig\n"
+ " Save vinum configuration to disk.\n"
+ "setdaemon [value]\n"
+ " Set daemon configuration.\n"
+ "start\n"
+ " Read configuration from all vinum drives.\n"
+ "start [volume | plex | subdisk]\n"
+ " Allow the system to access the objects\n"
+ "stop [-f] [volume | plex | subdisk]\n"
+ " Terminate access to the objects, or stop vinum if no parameters\n"
+ " are specified.\n"
};
puts(commands);
}
@@ -1183,7 +1223,7 @@ vinum_setdaemon(int argc, char *argv[], char *argv0[])
switch (argc) {
case 0:
if (ioctl(superdev, VINUM_GETDAEMON, &options) < 0)
- fprintf(stderr, "Can't set daemon options: %s (%d)\n", strerror(errno), errno);
+ fprintf(stderr, "Can't get daemon options: %s (%d)\n", strerror(errno), errno);
else
printf("Options mask: %d\n", options);
break;
@@ -1211,5 +1251,5 @@ vinum_saveconfig(int argc, char *argv[], char *argv0[])
}
ioctltype = 1; /* user saveconfig */
if (ioctl(superdev, VINUM_SAVECONFIG, &ioctltype) < 0)
- fprintf(stderr, "Can't set daemon options: %s (%d)\n", strerror(errno), errno);
+ fprintf(stderr, "Can't save configuration: %s (%d)\n", strerror(errno), errno);
}
OpenPOWER on IntegriCloud