New diff.
* Move all off_t variables that don't look like file sizes to
int64_t.
* Switch blockswritten to int64_t, so it won't wrap at 2TB.
* Same for blocksthisvol (deraadt@).
* Switch xferrate (tedu@) and blocksperfile from long to uint64_t.
* Since blocksperfile can be set with -B, move numarg() from long
to long long and don't mark small integer constant arguments with
'L'.
Index: dump.h
===================================================================
RCS file: /cvs/src/sbin/dump/dump.h,v
retrieving revision 1.19
diff -u -p -r1.19 dump.h
--- dump.h 24 May 2014 21:49:09 -0000 1.19
+++ dump.h 12 Jun 2014 21:02:32 -0000
@@ -65,15 +65,15 @@ int pipeout; /* true => output to standa
ino_t curino; /* current inumber; used globally */
int newtape; /* new tape flag */
int density; /* density in 0.1" units */
-off_t tapesize; /* estimated tape size, blocks */
-off_t tsize; /* tape size in 0.1" units */
+int64_t tapesize; /* estimated tape size, blocks */
+int64_t tsize; /* tape size in 0.1" units */
int unlimited; /* if set, write to end of medium */
-off_t asize; /* number of 0.1" units written on current tape */
+int64_t asize; /* number of 0.1" units written on current tape
*/
int etapes; /* estimated number of tapes */
int nonodump; /* if set, do not honor UF_NODUMP user flags */
int notify; /* notify operator flag */
-int blockswritten; /* number of blocks written on current tape */
+int64_t blockswritten; /* number of blocks written on current tape */
int tapeno; /* current tape number */
time_t tstart_writing; /* when started writing the first tape block */
long xferrate; /* averaged transfer rate of all volumes */
@@ -96,10 +96,11 @@ void timeest(void);
/* mapping routines */
union dinode;
-off_t blockest(union dinode *dp);
-void mapfileino(ino_t, off_t *, int *);
-int mapfiles(ino_t maxino, off_t *tapesize, char *disk, char * const *dirv);
-int mapdirs(ino_t maxino, off_t *tapesize);
+int64_t blockest(union dinode *dp);
+void mapfileino(ino_t, int64_t *, int *);
+int mapfiles(ino_t maxino, int64_t *tapesize, char *disk,
+ char * const *dirv);
+int mapdirs(ino_t maxino, int64_t *tapesize);
/* file dumping routines */
void ufs1_blksout(int32_t *blkp, int frags, ino_t ino);
Index: main.c
===================================================================
RCS file: /cvs/src/sbin/dump/main.c,v
retrieving revision 1.50
diff -u -p -r1.50 main.c
--- main.c 31 May 2014 08:28:13 -0000 1.50
+++ main.c 12 Jun 2014 21:19:18 -0000
@@ -59,12 +59,12 @@
#include "pathnames.h"
int notify = 0; /* notify operator flag */
-int blockswritten = 0; /* number of blocks written on current tape */
+int64_t blockswritten = 0; /* number of blocks written on current
tape */
int tapeno = 0; /* current tape number */
int density = 0; /* density in bytes/0.1" */
int ntrec = NTREC; /* # tape blocks in each tape record */
int cartridge = 0; /* Assume non-cartridge tape */
-long blocksperfile; /* output blocks per file */
+int64_t blocksperfile; /* output blocks per file */
char *host = NULL; /* remote host (if any) */
int maxbsize = 64*1024; /* XXX MAXBSIZE from sys/param.h */
@@ -75,7 +75,7 @@ struct disklabel lab;
*/
static int sblock_try[] = SBLOCKSEARCH;
-static long numarg(char *, long, long);
+static long long numarg(char *, long long, long long);
static void obsolete(int *, char **[]);
static void usage(void);
@@ -121,11 +121,11 @@ main(int argc, char *argv[])
break;
case 'B': /* blocks per output file */
- blocksperfile = numarg("blocks per file", 1L, 0L);
+ blocksperfile = numarg("blocks per file", 1, 0);
break;
case 'b': /* blocks per tape write */
- ntrec = numarg("blocks per write", 1L, 1000L);
+ ntrec = numarg("blocks per write", 1, 1000);
if (ntrec > maxbsize/1024) {
msg("Please choose a blocksize <= %dKB\n",
maxbsize/1024);
@@ -139,7 +139,7 @@ main(int argc, char *argv[])
break;
case 'd': /* density, in bits per inch */
- density = numarg("density", 10L, 327670L) / 10;
+ density = numarg("density", 10, 327670) / 10;
if (density >= 625 && !bflag)
ntrec = HIGHDENSITYTREC;
break;
@@ -149,7 +149,7 @@ main(int argc, char *argv[])
break;
case 'h':
- honorlevel = numarg("honor level", 0L, 10L);
+ honorlevel = numarg("honor level", 0, 10);
break;
case 'n': /* notify operators */
@@ -157,7 +157,7 @@ main(int argc, char *argv[])
break;
case 's': /* tape size, feet */
- tsize = numarg("tape size", 1L, 0L) * 12 * 10;
+ tsize = numarg("tape size", 1, 0) * 12 * 10;
break;
case 'S': /* estimate blocks and # of tapes */
@@ -573,17 +573,17 @@ usage(void)
* Pick up a numeric argument. It must be nonnegative and in the given
* range (except that a vmax of 0 means unlimited).
*/
-static long
-numarg(char *meaning, long vmin, long vmax)
+static long long
+numarg(char *meaning, long long vmin, long long vmax)
{
- long val;
+ long long val;
const char *errstr;
if (vmax == 0)
- vmax = LONG_MAX;
+ vmax = LLONG_MAX;
val = strtonum(optarg, vmin, vmax, &errstr);
if (errstr)
- errx(X_STARTUP, "%s is %s [%ld - %ld]",
+ errx(X_STARTUP, "%s is %s [%lld - %lld]",
meaning, errstr, vmin, vmax);
return (val);
Index: tape.c
===================================================================
RCS file: /cvs/src/sbin/dump/tape.c,v
retrieving revision 1.39
diff -u -p -r1.39 tape.c
--- tape.c 24 May 2014 21:49:09 -0000 1.39
+++ tape.c 12 Jun 2014 20:47:37 -0000
@@ -56,8 +56,8 @@
int writesize; /* size of malloc()ed buffer for tape */
int64_t lastspclrec = -1; /* tape block number of last written
header */
int trecno = 0; /* next record to write in current block */
-extern long blocksperfile; /* number of blocks per output file */
-long blocksthisvol; /* number of blocks on current output file */
+extern int64_t blocksperfile; /* number of blocks per output file */
+int64_t blocksthisvol; /* number of blocks on current output
file */
extern int ntrec; /* blocking factor on tape */
extern int cartridge;
extern char *host;
@@ -200,7 +200,8 @@ tperror(int signo)
quit("Cannot recover\n");
/* NOTREACHED */
}
- msg("write error %ld blocks into volume %d\n", blocksthisvol, tapeno);
+ msg("write error %lld blocks into volume %d\n",
+ (long long)blocksthisvol, tapeno);
broadcast("DUMP WRITE ERROR!\n");
if (!query("Do you want to restart?"))
dumpabort(0);
Index: traverse.c
===================================================================
RCS file: /cvs/src/sbin/dump/traverse.c,v
retrieving revision 1.34
diff -u -p -r1.34 traverse.c
--- traverse.c 31 May 2014 14:15:22 -0000 1.34
+++ traverse.c 12 Jun 2014 21:07:13 -0000
@@ -63,9 +63,9 @@ union dinode {
#define HASDUMPEDFILE 0x1
#define HASSUBDIRS 0x2
-static int dirindir(ino_t, daddr_t, int, off_t *, off_t *, int);
+static int dirindir(ino_t, daddr_t, int, off_t *, int64_t *, int);
static void dmpindir(ino_t, daddr_t, int, off_t *);
-static int searchdir(ino_t, daddr_t, long, off_t, off_t *, int);
+static int searchdir(ino_t, daddr_t, long, off_t, int64_t *, int);
void fs_mapinodes(ino_t maxino, off_t *tapesize, int *anydirskipped);
/*
@@ -75,10 +75,10 @@ void fs_mapinodes(ino_t maxino, off_t *t
* (when some of the blocks are usually used for indirect pointers);
* hence the estimate may be high.
*/
-off_t
+int64_t
blockest(union dinode *dp)
{
- off_t blkest, sizeest;
+ int64_t blkest, sizeest;
/*
* dp->di_size is the size of the file in bytes.
@@ -94,8 +94,8 @@ blockest(union dinode *dp)
* dump blocks (sizeest vs. blkest in the indirect block
* calculation).
*/
- blkest = howmany(dbtob((off_t)DIP(dp, di_blocks)), TP_BSIZE);
- sizeest = howmany((off_t)DIP(dp, di_size), TP_BSIZE);
+ blkest = howmany(dbtob((int64_t)DIP(dp, di_blocks)), TP_BSIZE);
+ sizeest = howmany((int64_t)DIP(dp, di_size), TP_BSIZE);
if (blkest > sizeest)
blkest = sizeest;
if (DIP(dp, di_size) > sblock->fs_bsize * NDADDR) {
@@ -115,7 +115,7 @@ blockest(union dinode *dp)
* Determine if given inode should be dumped
*/
void
-mapfileino(ino_t ino, off_t *tapesize, int *dirskipped)
+mapfileino(ino_t ino, int64_t *tapesize, int *dirskipped)
{
int mode;
union dinode *dp;
@@ -144,7 +144,7 @@ mapfileino(ino_t ino, off_t *tapesize, i
}
void
-fs_mapinodes(ino_t maxino, off_t *tapesize, int *anydirskipped)
+fs_mapinodes(ino_t maxino, int64_t *tapesize, int *anydirskipped)
{
int i, cg, inosused;
struct cg *cgp;
@@ -204,7 +204,7 @@ fs_mapinodes(ino_t maxino, off_t *tapesi
* the directories in the filesystem.
*/
int
-mapfiles(ino_t maxino, off_t *tapesize, char *disk, char * const *dirv)
+mapfiles(ino_t maxino, int64_t *tapesize, char *disk, char * const *dirv)
{
int anydirskipped = 0;
@@ -304,7 +304,7 @@ mapfiles(ino_t maxino, off_t *tapesize,
* pass using this algorithm.
*/
int
-mapdirs(ino_t maxino, off_t *tapesize)
+mapdirs(ino_t maxino, int64_t *tapesize)
{
union dinode *dp;
int i, isdir, nodump;
@@ -382,7 +382,7 @@ mapdirs(ino_t maxino, off_t *tapesize)
*/
static int
dirindir(ino_t ino, daddr_t blkno, int ind_level, off_t *filesize,
- off_t *tapesize, int nodump)
+ int64_t *tapesize, int nodump)
{
int ret = 0;
int i;
@@ -425,7 +425,7 @@ dirindir(ino_t ino, daddr_t blkno, int i
*/
static int
searchdir(ino_t ino, daddr_t blkno, long size, off_t filesize,
- off_t *tapesize, int nodump)
+ int64_t *tapesize, int nodump)
{
struct direct *dp;
union dinode *ip;
--
Christian "naddy" Weisgerber [email protected]