X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Frmt.c;h=0fe166b6251e7fc9aacf6d12fcbab2ea425a2cdd;hb=935cd4f51540ea5fa6d9789cd1d2a49c59087dee;hp=8e9ad8433a8da83d333b17559a65110ae7ab4ded;hpb=db16e89362432f19368f0a7199b6c3395778b8cf;p=chaz%2Ftar diff --git a/src/rmt.c b/src/rmt.c index 8e9ad84..0fe166b 100644 --- a/src/rmt.c +++ b/src/rmt.c @@ -1,5 +1,7 @@ /* Remote connection server. - Copyright 1994, 1995, 1996, 1997, 1999 Free Software Foundation, Inc. + + Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001 Free Software + Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -30,8 +32,12 @@ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #include "system.h" -#include "safe-read.h" +#include +#include +#include +#include +#include #include #ifndef EXIT_FAILURE @@ -70,10 +76,7 @@ static FILE *debug_file; #define DEBUG2(File, Arg1, Arg2) \ if (debug_file) fprintf(debug_file, File, Arg1, Arg2) -/*------------------------------------------------. -| Return an error string, given an error number. | -`------------------------------------------------*/ - +/* Return an error string, given an error number. */ #if HAVE_STRERROR # ifndef strerror char *strerror (); @@ -92,10 +95,6 @@ private_strerror (int errnum) # define strerror private_strerror #endif -/*---. -| ? | -`---*/ - static void report_error_message (const char *string) { @@ -105,10 +104,6 @@ report_error_message (const char *string) full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer)); } -/*---. -| ? | -`---*/ - static void report_numbered_error (int num) { @@ -118,10 +113,6 @@ report_numbered_error (int num) full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer)); } -/*---. -| ? | -`---*/ - static void get_string (char *string) { @@ -138,10 +129,6 @@ get_string (char *string) string[counter] = '\0'; } -/*---. -| ? | -`---*/ - static void prepare_record_buffer (size_t size) { @@ -203,7 +190,9 @@ decode_oflag (char const *oflag_string) struct name_value_pair { char const *name; int value; }; static struct name_value_pair const table[] = { +#ifdef O_APPEND {"APPEND", O_APPEND}, +#endif {"CREAT", O_CREAT}, #ifdef O_DSYNC {"DSYNC", O_DSYNC}, @@ -252,9 +241,33 @@ decode_oflag (char const *oflag_string) return symbolic_oflag; } -/*---. -| ? | -`---*/ +static struct option const long_opts[] = +{ + {"help", no_argument, 0, 'h'}, + {"version", no_argument, 0, 'v'}, + {0, 0, 0, 0} +}; + +static void +usage (int status) +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + printf (_("\ +Usage: %s [OPTION]\n\ +Manipulate a tape drive, accepting commands from a remote process.\n\ +\n\ + --version Output version info.\n\ + --help Output this help.\n"), + program_name); + fputs (_("\nReport bugs to .\n"), stdout); + } + + exit (status); +} int main (int argc, char *const *argv) @@ -271,12 +284,34 @@ main (int argc, char *const *argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); - /* FIXME: Implement --help and --version as for any other GNU program. */ + switch (getopt_long (argc, argv, "", long_opts, NULL)) + { + default: + usage (EXIT_FAILURE); + + case 'h': + usage (EXIT_SUCCESS); + + case 'v': + { + printf ("rmt (GNU %s) %s\n", PACKAGE, VERSION); + print_copyright ("2001 Free Software Foundation, Inc."); + puts (_("\ +This program comes with NO WARRANTY, to the extent permitted by law.\n\ +You may redistribute it under the terms of the GNU General Public License;\n\ +see the file named COPYING for details.")); + } + return EXIT_SUCCESS; + + case -1: + break; + } - argc--, argv++; - if (argc > 0) + if (optind < argc) { - debug_file = fopen (*argv, "w"); + if (optind != argc - 1) + usage (EXIT_FAILURE); + debug_file = fopen (argv[optind], "w"); if (debug_file == 0) { report_numbered_error (errno); @@ -286,10 +321,10 @@ main (int argc, char *const *argv) } top: - errno = 0; /* FIXME: errno should be read-only */ + errno = 0; status = 0; if (safe_read (STDIN_FILENO, &command, 1) != 1) - exit (EXIT_SUCCESS); + return EXIT_SUCCESS; switch (command) {