X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Frmt.c;h=1088fa1622976c7da0abd9be2375eadd4614de93;hb=5a9174376b2e5f16caac14a6de3dc3c21c5f8b68;hp=74f6e3555ca2ac11d82db769926b99e4b52c631b;hpb=68867c01034cc99f0d884dc987c16e5c4f39ce96;p=chaz%2Ftar diff --git a/src/rmt.c b/src/rmt.c index 74f6e35..1088fa1 100644 --- a/src/rmt.c +++ b/src/rmt.c @@ -1,7 +1,7 @@ /* Remote connection server. - Copyright 1994, 1995, 1996, 1997, 1999, 2000, 2001 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 @@ -129,7 +129,7 @@ get_string (char *string) } static void -prepare_record_buffer (size_t size) +prepare_input_buffer (int fd, size_t size) { if (size <= allocated_size) return; @@ -150,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 } @@ -262,7 +262,7 @@ 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); @@ -292,19 +292,14 @@ main (int argc, char *const *argv) usage (EXIT_SUCCESS); case 'v': - printf ("rmt (GNU %s) %s\n", PACKAGE, VERSION); - - /* Note to translator: Please translate "Copyright " to "©" - (C-in-a-circle) if available in the translation's character - set and encoding. */ - printf (_("Copyright %d Free Software Foundation, Inc."), 2001); - printf ("\n"); - - puts (_("\ + { + printf ("rmt (%s) %s\n%s\n", PACKAGE_NAME, PACKAGE_VERSION, + "Copyright (C) 2003 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: @@ -319,7 +314,7 @@ see the file named COPYING for details.")); if (debug_file == 0) { report_numbered_error (errno); - exit (EXIT_FAILURE); + return EXIT_FAILURE; } setbuf (debug_file, 0); } @@ -400,7 +395,7 @@ top: if (c10 / 10 != count || (negative ? c10 < nc : nc < c10)) { report_error_message (N_("Seek offset out of range")); - exit (EXIT_FAILURE); + return EXIT_FAILURE; } count = nc; } @@ -413,7 +408,7 @@ top: case 2: whence = SEEK_END; break; default: report_error_message (N_("Seek direction out of range")); - exit (EXIT_FAILURE); + return EXIT_FAILURE; } count = lseek (tape, count, whence); if (count < 0) @@ -444,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], @@ -454,7 +449,7 @@ top: DEBUG (_("rmtd: Premature eof\n")); report_error_message (N_("Premature end of file")); - exit (EXIT_FAILURE); /* exit status used to be 2 */ + return EXIT_FAILURE; /* exit status used to be 2 */ } } status = full_write (tape, record_buffer, size); @@ -472,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; @@ -520,7 +515,7 @@ top: if (c10 / 10 != count || (negative ? c10 < nc : nc < c10)) { report_error_message (N_("Seek offset out of range")); - exit (EXIT_FAILURE); + return EXIT_FAILURE; } count = nc; } @@ -530,7 +525,7 @@ top: if (mtop.mt_count != count) { report_error_message (N_("Seek offset out of range")); - exit (EXIT_FAILURE); + return EXIT_FAILURE; } mtop.mt_op = atoi (operation_string); @@ -564,7 +559,7 @@ top: DEBUG1 (_("rmtd: Garbage command %c\n"), command); report_error_message (N_("Garbage command")); - exit (EXIT_FAILURE); /* exit status used to be 3 */ + return EXIT_FAILURE; /* exit status used to be 3 */ } respond: @@ -578,9 +573,3 @@ ioerror: report_numbered_error (errno); goto top; } - -/* - Local Variables: - coding: iso-latin-1 - End: -*/