]> git.wh0rd.org - dump.git/blobdiff - common/dumprmt.c
Fixed largefile seeks in rmt
[dump.git] / common / dumprmt.c
index 69ada17ac0980df2139c6f6a1ccfa7604db4af89..699122f4349d666fb21c3719a03958f0ed8fe58e 100644 (file)
@@ -41,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: dumprmt.c,v 1.22 2002/07/19 14:57:39 stelian Exp $";
+       "$Id: dumprmt.c,v 1.25 2003/02/12 11:02:29 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -49,6 +49,7 @@ static const char rcsid[] =
 #include <sys/mtio.h>
 #include <sys/socket.h>
 #include <sys/time.h>
+#include <fcntl.h>
 #ifdef __linux__
 #include <sys/types.h>
 #ifdef HAVE_EXT2FS_EXT2_FS_H
@@ -76,6 +77,7 @@ static const char rcsid[] =
 #include <ctype.h>
 #include <errno.h>
 #include <compaterr.h>
+#include <rmtflags.h>
 #include <netdb.h>
 #include <pwd.h>
 #include <stdio.h>
@@ -102,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 *));
@@ -273,11 +275,17 @@ okname(const char *cp0)
 }
 
 int
-rmtopen(const char *tape, const char *mode)
+rmtopen(const char *tape, const int mode)
 {
        char buf[MAXPATHLEN];
-
-       (void)snprintf(buf, sizeof (buf), "O%s\n%s\n", tape, mode);
+       char *rmtflags;
+
+       rmtflags = rmtflags_tochar(mode);
+       (void)snprintf(buf, sizeof (buf), "O%s\n%d %s\n", 
+                      tape, 
+                      mode & O_ACCMODE, 
+                      rmtflags);
+       free(rmtflags);
        rmtstate = TS_OPEN;
        return (rmtcall(tape, buf));
 }
@@ -323,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));
 }
 
@@ -359,7 +367,7 @@ rmtioctl(int cmd, int count)
        return (rmtcall("ioctl", buf));
 }
 
-static int
+static OFF_T
 rmtcall(const char *cmd, const char *buf)
 {
 
@@ -368,7 +376,7 @@ rmtcall(const char *cmd, const char *buf)
        return (rmtreply(cmd));
 }
 
-static int
+static OFF_T
 rmtreply(const char *cmd)
 {
        char *cp;
@@ -393,7 +401,7 @@ rmtreply(const char *cmd)
                    code);
                rmtconnaborted(0);
        }
-       return (atoi(code + 1));
+       return (OFF_T)(atoll(code + 1));
 }
 
 static int