]> git.wh0rd.org - dump.git/blobdiff - common/dumprmt.c
Lots of fixes from Philipe Troin:
[dump.git] / common / dumprmt.c
index 1d49a240d5e8883aeb9c650c997d59f0e1c12195..d39e13432b2c9a4ca391ba9eb16c5839b544ebae 100644 (file)
@@ -41,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: dumprmt.c,v 1.24 2003/01/10 14:42:50 stelian Exp $";
+       "$Id: dumprmt.c,v 1.26 2003/03/26 10:58:22 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -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 *));
@@ -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