X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Frmt.c;h=f5e036cd6ceddae21e80b1b58aa126b6c6ad3633;hb=7962e1901bbed28bdf32891cb253b4e217b1c151;hp=745120dd68906d0f89f5fdad17cd779949a60421;hpb=1521a94b11b0b7a2fe2a8318207d7d6b4bdbf76b;p=chaz%2Ftar diff --git a/src/rmt.c b/src/rmt.c index 745120d..f5e036c 100644 --- a/src/rmt.c +++ b/src/rmt.c @@ -13,7 +13,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., - 59 Place - Suite 330, Boston, MA 02111-1307, USA. */ + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Copyright (C) 1983 Regents of the University of California. All rights reserved. @@ -128,7 +128,7 @@ get_string (char *string) for (counter = 0; counter < STRING_SIZE; counter++) { - if (full_read (STDIN_FILENO, string + counter, 1) != 1) + if (safe_read (STDIN_FILENO, string + counter, 1) != 1) exit (EXIT_SUCCESS); if (string[counter] == '\n') @@ -210,7 +210,7 @@ main (int argc, char *const *argv) top: errno = 0; /* FIXME: errno should be read-only */ status = 0; - if (full_read (STDIN_FILENO, &command, 1) != 1) + if (safe_read (STDIN_FILENO, &command, 1) != 1) exit (EXIT_SUCCESS); switch (command) @@ -254,6 +254,7 @@ top: char position_string[STRING_SIZE]; off_t count = 0; int negative; + int whence; char *p; get_string (count_string); @@ -288,7 +289,16 @@ top: } } - count = lseek (tape, count, atoi (position_string)); + switch (atoi (position_string)) + { + case 0: whence = SEEK_SET; break; + case 1: whence = SEEK_CUR; break; + case 2: whence = SEEK_END; break; + default: + report_error_message (N_("Seek direction out of range")); + exit (EXIT_FAILURE); + } + count = lseek (tape, count, whence); if (count < 0) goto ioerror; @@ -320,8 +330,8 @@ top: prepare_record_buffer (size); for (counter = 0; counter < size; counter += status) { - status = full_read (STDIN_FILENO, &record_buffer[counter], - size - counter); + status = safe_read (STDIN_FILENO, &record_buffer[counter], + size - counter); if (status <= 0) { DEBUG (_("rmtd: Premature eof\n")); @@ -346,7 +356,7 @@ top: size = atol (count_string); prepare_record_buffer (size); - status = full_read (tape, record_buffer, size); + status = safe_read (tape, record_buffer, size); if (status < 0) goto ioerror; sprintf (reply_buffer, "A%ld\n", status);