X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=common%2Fdumprmt.c;h=d39e13432b2c9a4ca391ba9eb16c5839b544ebae;hb=c3f69f06e7c87a8e39d2bc02396fa3ba8db76e84;hp=f89a13de1fb60a1c5cf5fdc14b0b3bdd12a85dee;hpb=ba3af39e8b08027d3338b5533bddc86a9c803a74;p=dump.git diff --git a/common/dumprmt.c b/common/dumprmt.c index f89a13d..d39e134 100644 --- a/common/dumprmt.c +++ b/common/dumprmt.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dumprmt.c,v 1.23 2002/07/29 12:00:33 stelian Exp $"; + "$Id: dumprmt.c,v 1.26 2003/03/26 10:58:22 stelian Exp $"; #endif /* not lint */ #include @@ -104,12 +104,12 @@ int rshpid = -1; static const char *rmtpeer = 0; static int okname __P((const char *)); -static int rmtcall __P((const char *, const char *)); +static OFF_T rmtcall __P((const char *, const char *)); static void rmtconnaborted __P((int)); static int rmtgetb __P((void)); static int rmtgetconn __P((void)); static void rmtgets __P((char *, size_t)); -static int rmtreply __P((const char *)); +static OFF_T rmtreply __P((const char *)); static int piped_child __P((const char **command)); #ifdef KERBEROS int krcmd __P((char **, int /*u_short*/, char *, char *, int *, char *)); @@ -331,12 +331,12 @@ rmtwrite(const char *buf, size_t count) return (rmtreply("write")); } -int -rmtseek(int offset, int pos) +OFF_T +rmtseek(OFF_T offset, int pos) { char line[80]; - (void)snprintf(line, sizeof (line), "L%d\n%d\n", offset, pos); + (void)snprintf(line, sizeof (line), "L%lld\n%d\n", (long long)offset, pos); return (rmtcall("seek", line)); } @@ -350,7 +350,15 @@ rmtstatus(void) if (rmtstate != TS_OPEN) return (NULL); - rmtcall("status", "S\n"); + i = rmtcall("status", "S"); + if (i < 0) return NULL; + if (i != (int)sizeof(mts)) { + msg("mtget sizes different between host (%d) " + "and remote tape (%d)", sizeof(mts), i); + for ( /* empty */; i > 0; --i) + rmtgetb(); + return NULL; + } for (i = 0, cp = (char *)&mts; i < (int)sizeof(mts); i++) *cp++ = rmtgetb(); return (&mts); @@ -367,7 +375,7 @@ rmtioctl(int cmd, int count) return (rmtcall("ioctl", buf)); } -static int +static OFF_T rmtcall(const char *cmd, const char *buf) { @@ -376,7 +384,7 @@ rmtcall(const char *cmd, const char *buf) return (rmtreply(cmd)); } -static int +static OFF_T rmtreply(const char *cmd) { char *cp; @@ -401,7 +409,7 @@ rmtreply(const char *cmd) code); rmtconnaborted(0); } - return (atoi(code + 1)); + return (OFF_T)(atoll(code + 1)); } static int