X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Frmt.c;h=f487b2c39e3ec3e7394adf03b729f7c18632147b;hb=aea0a1d970b8125293c8f03c60e74c9f04160379;hp=e960f10b9377bd09d5a94ad2f2838da4b2f45287;hpb=c9f5ead8dec28ea7b774184f3c22e9b02ac6f8e2;p=chaz%2Ftar diff --git a/src/rmt.c b/src/rmt.c index e960f10..f487b2c 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, 2003 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,7 +32,9 @@ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #include "system.h" -#include "safe-read.h" +#include +#include +#include #include #include @@ -71,10 +75,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 (); @@ -93,10 +94,6 @@ private_strerror (int errnum) # define strerror private_strerror #endif -/*---. -| ? | -`---*/ - static void report_error_message (const char *string) { @@ -106,10 +103,6 @@ report_error_message (const char *string) full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer)); } -/*---. -| ? | -`---*/ - static void report_numbered_error (int num) { @@ -119,10 +112,6 @@ report_numbered_error (int num) full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer)); } -/*---. -| ? | -`---*/ - static void get_string (char *string) { @@ -139,12 +128,8 @@ get_string (char *string) string[counter] = '\0'; } -/*---. -| ? | -`---*/ - static void -prepare_record_buffer (size_t size) +prepare_input_buffer (int fd, size_t size) { if (size <= allocated_size) return; @@ -165,14 +150,14 @@ prepare_record_buffer (size_t size) allocated_size = size; #ifdef SO_RCVBUF - while (size > 1024 && - (setsockopt (STDIN_FILENO, SOL_SOCKET, SO_RCVBUF, - (char *) &size, sizeof size) - < 0)) - size -= 1024; -#else - /* FIXME: I do not see any purpose to the following line... Sigh! */ - size = 1 + ((size - 1) % 1024); + if (0 <= fd) + { + int isize = size < INT_MAX ? size : INT_MAX; + while (setsockopt (fd, SOL_SOCKET, SO_RCVBUF, + (char *) &isize, sizeof isize) + && 1024 < isize) + isize >>= 1; + } #endif } @@ -204,7 +189,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}, @@ -275,16 +262,12 @@ Manipulate a tape drive, accepting commands from a remote process.\n\ --version Output version info.\n\ --help Output this help.\n"), program_name); - fputs (_("\nReport bugs to .\n"), stdout); + printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); } exit (status); } -/*---. -| ? | -`---*/ - int main (int argc, char *const *argv) { @@ -309,12 +292,14 @@ main (int argc, char *const *argv) usage (EXIT_SUCCESS); case 'v': - printf ("rmt (GNU %s) %s\n%s\n%s\n", PACKAGE, VERSION, - "Copyright 1999 Free Software Foundation, Inc.", - _("\ + { + printf ("rmt (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION); + printf (_("Copyright (C) %d Free Software Foundation, Inc.\n"), 2003); + 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: @@ -454,7 +439,7 @@ top: size = atol (count_string); DEBUG1 ("rmtd: W %s\n", count_string); - prepare_record_buffer (size); + prepare_input_buffer (STDIN_FILENO, size); for (counter = 0; counter < size; counter += status) { status = safe_read (STDIN_FILENO, &record_buffer[counter], @@ -482,7 +467,7 @@ top: DEBUG1 ("rmtd: R %s\n", count_string); size = atol (count_string); - prepare_record_buffer (size); + prepare_input_buffer (-1, size); status = safe_read (tape, record_buffer, size); if (status < 0) goto ioerror;