H David;

On 06/07/16 00:52, David Malone wrote:
Hi Pedro,

The OpenBSD commit message said off_t, but you commit and commit
message says size_t, which won't be bigger than a long on some of
our platforms. Should it have been off_t, or did I misunderstand
something?


You didn't misunderstand anything.

The OpenBSD commit logs says off_t but their commit also has
size_t's. I didn't feel like changing their commit log but
still wanted to keep the "spirit" of the change and give them
credit.

size_t is bigger on the platforms that matter, plus it is
unsigned.


Pedro.

        David.
Author: pfg
Date: Mon May 16 16:29:56 2016
New Revision: 299954
URL: https://svnweb.freebsd.org/changeset/base/299954

Log:
  MFC r298901:
  restore: promote some getfiles() parameters to size_t.

  This is based on a change from OpenBSD:

    "Fix restore so that it can actually restore files larger than 4GB by
    changing the type of "size" to off_t in getfiles() plus little dependent
    type cleanup, from Daniel Lucq."

  It is an important for machines with 32 bit longs.
  While here unsign the flags, also from OpenBSD.

  Obtained from:        OpenBSD (with changes)

Modified:
  stable/10/sbin/restore/dirs.c
  stable/10/sbin/restore/extern.h
  stable/10/sbin/restore/tape.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sbin/restore/dirs.c
==============================================================================
--- stable/10/sbin/restore/dirs.c       Mon May 16 16:16:46 2016        
(r299953)
+++ stable/10/sbin/restore/dirs.c       Mon May 16 16:29:56 2016        
(r299954)
@@ -85,7 +85,7 @@ struct modeinfo {
        mode_t mode;
        uid_t uid;
        gid_t gid;
-       int flags;
+       u_int flags;
        int extsize;
 };

@@ -115,8 +115,8 @@ static struct inotab        *allocinotab(struct
 static void             flushent(void);
 static struct inotab   *inotablookup(ino_t);
 static RST_DIR         *opendirfile(const char *);
-static void             putdir(char *, long);
-static void             putdirattrs(char *, long);
+static void             putdir(char *, size_t);
+static void             putdirattrs(char *, size_t);
 static void             putent(struct direct *);
 static void             rst_seekdir(RST_DIR *, long, long);
 static long             rst_telldir(RST_DIR *);
@@ -323,10 +323,10 @@ searchdir(ino_t   inum, char *name)
  * Put the directory entries in the directory file
  */
 static void
-putdir(char *buf, long size)
+putdir(char *buf, size_t size)
 {
        struct direct *dp;
-       long loc, i;
+       size_t loc, i;

        for (loc = 0; loc < size; ) {
                dp = (struct direct *)(buf + loc);
@@ -356,12 +356,12 @@ putdir(char *buf, long size)
                                   "reclen not multiple of 4 ");
                        if (dp->d_reclen < DIRSIZ(0, dp))
                                vprintf(stdout,
-                                  "reclen less than DIRSIZ (%d < %zu) ",
+                                  "reclen less than DIRSIZ (%u < %zu) ",
                                   dp->d_reclen, DIRSIZ(0, dp));
 #if NAME_MAX < 255
                        if (dp->d_namlen > NAME_MAX)
                                vprintf(stdout,
-                                  "reclen name too big (%d > %d) ",
+                                  "reclen name too big (%u > %u) ",
                                   dp->d_namlen, NAME_MAX);
 #endif
                        vprintf(stdout, "\n");
@@ -418,7 +418,7 @@ flushent(void)
  * Save extended attributes for a directory entry to a file.
  */
 static void
-putdirattrs(char *buf, long size)
+putdirattrs(char *buf, size_t size)
 {

        if (mf != NULL && fwrite(buf, size, 1, mf) != 1)

Modified: stable/10/sbin/restore/extern.h
==============================================================================
--- stable/10/sbin/restore/extern.h     Mon May 16 16:16:46 2016        
(r299953)
+++ stable/10/sbin/restore/extern.h     Mon May 16 16:29:56 2016        
(r299954)
@@ -54,8 +54,8 @@ void           freeentry(struct entry *);
 void            freename(char *);
 int             genliteraldir(char *, ino_t);
 char           *gentempname(struct entry *);
-void            getfile(void (*)(char *, long), void (*)(char *, long),
-                       void (*)(char *, long));
+void            getfile(void (*)(char *, size_t), void (*)(char *, size_t),
+                       void (*)(char *, size_t));
 void            getvol(long);
 void            initsymtable(char *);
 int             inodetype(ino_t);
@@ -98,7 +98,7 @@ void           swabst(u_char *, u_char *);
 void            treescan(char *, ino_t, long (*)(char *, ino_t, int));
 ino_t           upperbnd(ino_t);
 long            verifyfile(char *, ino_t, int);
-void            xtrnull(char *, long);
+void            xtrnull(char *, size_t);

 /* From ../dump/dumprmt.c */
 void           rmtclose(void);

Modified: stable/10/sbin/restore/tape.c
==============================================================================
--- stable/10/sbin/restore/tape.c       Mon May 16 16:16:46 2016        
(r299953)
+++ stable/10/sbin/restore/tape.c       Mon May 16 16:29:56 2016        
(r299954)
@@ -104,7 +104,7 @@ static int   checksum(int *);
 static void     findinode(struct s_spcl *);
 static void     findtapeblksize(void);
 static char    *setupextattr(int);
-static void     xtrattr(char *, long);
+static void     xtrattr(char *, size_t);
 static void     set_extattr_link(char *, void *, int);
 static void     set_extattr_fd(int, char *, void *, int);
 static int      gethead(struct s_spcl *);
@@ -114,12 +114,12 @@ static u_long      swabl(u_long);
 static u_char  *swablong(u_char *, int);
 static u_char  *swabshort(u_char *, int);
 static void     terminateinput(void);
-static void     xtrfile(char *, long);
-static void     xtrlnkfile(char *, long);
-static void     xtrlnkskip(char *, long);
-static void     xtrmap(char *, long);
-static void     xtrmapskip(char *, long);
-static void     xtrskip(char *, long);
+static void     xtrfile(char *, size_t);
+static void     xtrlnkfile(char *, size_t);
+static void     xtrlnkskip(char *, size_t);
+static void     xtrmap(char *, size_t);
+static void     xtrmapskip(char *, size_t);
+static void     xtrskip(char *, size_t);

 /*
  * Set up an input source
@@ -564,7 +564,7 @@ printdumpinfo(void)
 int
 extractfile(char *name)
 {
-       int flags;
+       u_int flags;
        uid_t uid;
        gid_t gid;
        mode_t mode;
@@ -931,13 +931,13 @@ skipfile(void)
  * to the skip function.
  */
 void
-getfile(void (*datafill)(char *, long), void (*attrfill)(char *, long),
-       void (*skip)(char *, long))
+getfile(void (*datafill)(char *, size_t), void (*attrfill)(char *, size_t),
+       void (*skip)(char *, size_t))
 {
        int i;
-       off_t size;
+       volatile off_t size;
        int curblk, attrsize;
-       void (*fillit)(char *, long);
+       void (*fillit)(char *, size_t);
        static char clearedbuf[MAXBSIZE];
        char buf[MAXBSIZE / TP_BSIZE][TP_BSIZE];
        char junk[TP_BSIZE];
@@ -1066,7 +1066,7 @@ setupextattr(int extsize)
  * Extract the next block of extended attributes.
  */
 static void
-xtrattr(char *buf, long size)
+xtrattr(char *buf, size_t size)
 {

        if (extloc + size > extbufsize)
@@ -1079,7 +1079,7 @@ xtrattr(char *buf, long size)
  * Write out the next block of a file.
  */
 static void
-xtrfile(char *buf, long        size)
+xtrfile(char *buf, size_t size)
 {

        if (Nflag)
@@ -1096,7 +1096,7 @@ xtrfile(char *buf, long   size)
  */
 /* ARGSUSED */
 static void
-xtrskip(char *buf, long size)
+xtrskip(char *buf, size_t size)
 {

        if (lseek(ofile, size, SEEK_CUR) == -1) {
@@ -1111,7 +1111,7 @@ xtrskip(char *buf, long size)
  * Collect the next block of a symbolic link.
  */
 static void
-xtrlnkfile(char *buf, long size)
+xtrlnkfile(char *buf, size_t size)
 {

        pathlen += size;
@@ -1128,7 +1128,7 @@ xtrlnkfile(char *buf, long size)
  */
 /* ARGSUSED */
 static void
-xtrlnkskip(char *buf, long size)
+xtrlnkskip(char *buf, size_t size)
 {

        fprintf(stderr, "unallocated block in symbolic link %s\n",
@@ -1140,7 +1140,7 @@ xtrlnkskip(char *buf, long size)
  * Collect the next block of a bit map.
  */
 static void
-xtrmap(char *buf, long size)
+xtrmap(char *buf, size_t size)
 {

        memmove(map, buf, size);
@@ -1152,7 +1152,7 @@ xtrmap(char *buf, long size)
  */
 /* ARGSUSED */
 static void
-xtrmapskip(char *buf, long size)
+xtrmapskip(char *buf, size_t size)
 {

        panic("hole in map\n");
@@ -1164,7 +1164,7 @@ xtrmapskip(char *buf, long size)
  */
 /* ARGSUSED */
 void
-xtrnull(char *buf, long size)
+xtrnull(char *buf, size_t size)
 {

        return;

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to