X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=common%2Fdumprmt.c;h=eb61a55c9a4ced0db589b507249058fa887ca6b8;hp=4c1bedf23e8a11b298a9b39535ddb931b7af411b;hb=e1abc9ce25132eef1239047a071c2c1d4822dd9f;hpb=11856e771fadee7ddb9b5a613c91f562bf363da7 diff --git a/common/dumprmt.c b/common/dumprmt.c index 4c1bedf..eb61a55 100644 --- a/common/dumprmt.c +++ b/common/dumprmt.c @@ -18,11 +18,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -41,7 +37,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dumprmt.c,v 1.19 2002/01/16 09:32:14 stelian Exp $"; + "$Id: dumprmt.c,v 1.27 2003/03/30 15:40:33 stelian Exp $"; #endif /* not lint */ #include @@ -49,6 +45,7 @@ static const char rcsid[] = #include #include #include +#include #ifdef __linux__ #include #ifdef HAVE_EXT2FS_EXT2_FS_H @@ -76,6 +73,7 @@ static const char rcsid[] = #include #include #include +#include #include #include #include @@ -102,12 +100,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 *)); @@ -132,7 +130,7 @@ rmthost(const char *host) } static void -rmtconnaborted(int signo) +rmtconnaborted(UNUSED(int signo)) { msg("Lost connection to remote host.\n"); if (errfd != -1) { @@ -161,8 +159,8 @@ rmtconnaborted(int signo) static int rmtgetconn(void) { - register char *cp; - register const char *rmt; + char *cp; + const char *rmt; static struct servent *sp = NULL; static struct passwd *pwd = NULL; const char *tuser; @@ -259,8 +257,8 @@ rmtgetconn(void) static int okname(const char *cp0) { - register const char *cp; - register int c; + const char *cp; + int c; for (cp = cp0; *cp; cp++) { c = *cp; @@ -273,11 +271,17 @@ okname(const char *cp0) } int -rmtopen(const char *tape, int mode) +rmtopen(const char *tape, const int mode) { char buf[MAXPATHLEN]; - - (void)snprintf(buf, sizeof (buf), "O%s\n%d\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 +327,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)); } @@ -337,13 +341,21 @@ struct mtget mts; struct mtget * rmtstatus(void) { - register int i; - register char *cp; + int i; + char *cp; if (rmtstate != TS_OPEN) return (NULL); - rmtcall("status", "S\n"); - for (i = 0, cp = (char *)&mts; i < sizeof(mts); i++) + 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); } @@ -359,19 +371,19 @@ rmtioctl(int cmd, int count) return (rmtcall("ioctl", buf)); } -static int +static OFF_T rmtcall(const char *cmd, const char *buf) { - if (write(tormtape, buf, strlen(buf)) != strlen(buf)) + if (write(tormtape, buf, strlen(buf)) != (ssize_t)strlen(buf)) rmtconnaborted(0); return (rmtreply(cmd)); } -static int +static OFF_T rmtreply(const char *cmd) { - register char *cp; + char *cp; char code[30], emsg[BUFSIZ]; rmtgets(code, sizeof (code)); @@ -393,7 +405,7 @@ rmtreply(const char *cmd) code); rmtconnaborted(0); } - return (atoi(code + 1)); + return (OFF_T)(atoll(code + 1)); } static int @@ -410,7 +422,7 @@ rmtgetb(void) static void rmtgets(char *line, size_t len) { - register char *cp = line; + char *cp = line; while (len > 1) { *cp = rmtgetb();