@@ -143,11 +143,9 @@ cowextsize_f(
int argc,
char **argv)
{
- size_t blocksize, sectsize;
int c;
recurse_all = recurse_dir = 0;
- init_cvtnum(&blocksize, §size);
while ((c = getopt(argc, argv, "DR")) != EOF) {
switch (c) {
case 'D':
@@ -164,7 +162,7 @@ cowextsize_f(
}
if (optind < argc) {
- cowextsize = (long)cvtnum(blocksize, sectsize, argv[optind]);
+ cowextsize = (long)io_cvtnum(argv[optind]);
if (cowextsize < 0) {
printf(_("non-numeric cowextsize argument -- %s\n"),
argv[optind]);
@@ -81,19 +81,16 @@ fadvise_f(
}
}
if (range) {
- size_t blocksize, sectsize;
-
if (optind != argc - 2)
return command_usage(&fadvise_cmd);
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
+ length = io_cvtnum(argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -396,14 +396,11 @@ fsmap_f(
int i = 0;
int c;
unsigned long long nr = 0;
- size_t fsblocksize, fssectsize;
struct fs_path *fs;
static bool tab_init;
bool dumped_flags = false;
int dflag, lflag, rflag;
- init_cvtnum(&fsblocksize, &fssectsize);
-
dflag = lflag = rflag = 0;
while ((c = getopt(argc, argv, "dlmn:rv")) != EOF) {
switch (c) {
@@ -437,7 +434,7 @@ fsmap_f(
return command_usage(&fsmap_cmd);
if (argc > optind) {
- start = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ start = io_cvtnum(argv[optind]);
if (start < 0) {
fprintf(stderr,
_("Bad rmap start_bblock %s.\n"),
@@ -448,7 +445,7 @@ fsmap_f(
}
if (argc > optind + 1) {
- end = cvtnum(fsblocksize, fssectsize, argv[optind + 1]);
+ end = io_cvtnum(argv[optind + 1]);
if (end < 0) {
fprintf(stderr,
_("Bad rmap end_bblock %s.\n"),
@@ -39,18 +39,15 @@ _("Usage: %s [-adfinrRstVx] [-m mode] [-p prog] [[-c|-C] cmd]... file\n"),
exit(1);
}
-void
-init_cvtnum(
- size_t *blocksize,
- size_t *sectsize)
+long long
+io_cvtnum(
+ char *s)
{
- if (!file || (file->flags & IO_FOREIGN)) {
- *blocksize = 4096;
- *sectsize = 512;
- } else {
- *blocksize = file->geom.blocksize;
- *sectsize = file->geom.sectsize;
- }
+ /* addfile() should always set up this much geometry */
+ ASSERT(file->geom.blocksize);
+ ASSERT(file->geom.sectsize);
+
+ return cvtnum(file->geom.blocksize, file->geom.sectsize, s);
}
static void
@@ -26,4 +26,4 @@ extern int expert;
extern size_t pagesize;
extern struct timeval stopwatch;
-extern void init_cvtnum(size_t *blocksize, size_t *sectsize);
+extern long long io_cvtnum(char *s);
@@ -55,7 +55,6 @@ madvise_f(
size_t length;
void *start;
int advise = MADV_NORMAL, c;
- size_t blocksize, sectsize;
while ((c = getopt(argc, argv, "drsw")) != EOF) {
switch (c) {
@@ -80,15 +79,14 @@ madvise_f(
offset = mapping->offset;
length = mapping->length;
} else if (optind == argc - 2) {
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
return 0;
}
optind++;
- llength = cvtnum(blocksize, sectsize, argv[optind]);
+ llength = io_cvtnum(argv[optind]);
if (llength < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -31,7 +31,6 @@ mincore_f(
{
off64_t offset, llength;
size_t length;
- size_t blocksize, sectsize;
void *start;
void *current, *previous;
unsigned char *vec;
@@ -41,14 +40,13 @@ mincore_f(
offset = mapping->offset;
length = mapping->length;
} else if (argc == 3) {
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[1]);
+ offset = io_cvtnum(argv[1]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[1]);
return 0;
}
- llength = cvtnum(blocksize, sectsize, argv[2]);
+ llength = io_cvtnum(argv[2]);
if (llength < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[2]);
@@ -160,7 +160,6 @@ mmap_f(
ssize_t length = 0, length2 = 0;
void *address = NULL;
char *filename;
- size_t blocksize, sectsize;
int c, prot = 0;
if (argc == 1) {
@@ -182,8 +181,6 @@ mmap_f(
return 0;
}
- init_cvtnum(&blocksize, §size);
-
while ((c = getopt(argc, argv, "rwxs:")) != EOF) {
switch (c) {
case 'r':
@@ -196,7 +193,7 @@ mmap_f(
prot |= PROT_EXEC;
break;
case 's':
- length2 = cvtnum(blocksize, sectsize, optarg);
+ length2 = io_cvtnum(optarg);
break;
default:
return command_usage(&mmap_cmd);
@@ -208,13 +205,13 @@ mmap_f(
if (optind != argc - 2)
return command_usage(&mmap_cmd);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"), argv[optind]);
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
+ length = io_cvtnum(argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"), argv[optind]);
return 0;
@@ -292,7 +289,6 @@ msync_f(
ssize_t length;
void *start;
int c, flags = 0;
- size_t blocksize, sectsize;
while ((c = getopt(argc, argv, "ais")) != EOF) {
switch (c) {
@@ -314,15 +310,14 @@ msync_f(
offset = mapping->offset;
length = mapping->length;
} else if (optind == argc - 2) {
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
+ length = io_cvtnum(argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -378,7 +373,6 @@ mread_f(
char *bp;
void *start;
int dump = 0, rflag = 0, c;
- size_t blocksize, sectsize;
while ((c = getopt(argc, argv, "frv")) != EOF) {
switch (c) {
@@ -400,15 +394,14 @@ mread_f(
offset = mapping->offset;
length = mapping->length;
} else if (optind == argc - 2) {
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
+ length = io_cvtnum(argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -536,7 +529,6 @@ mwrite_f(
int seed = 'X';
int rflag = 0;
int c;
- size_t blocksize, sectsize;
while ((c = getopt(argc, argv, "rS:")) != EOF) {
switch (c) {
@@ -559,15 +551,14 @@ mwrite_f(
offset = mapping->offset;
length = mapping->length;
} else if (optind == argc - 2) {
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
+ length = io_cvtnum(argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -620,16 +611,12 @@ mremap_f(
void *new_addr = NULL;
int flags = 0;
int c;
- size_t blocksize, sectsize;
-
- init_cvtnum(&blocksize, §size);
while ((c = getopt(argc, argv, "f:m")) != EOF) {
switch (c) {
case 'f':
flags = MREMAP_FIXED|MREMAP_MAYMOVE;
- new_addr = (void *)(unsigned long)cvtnum(blocksize,
- sectsize, optarg);
+ new_addr = (void *)(unsigned long)io_cvtnum(optarg);
break;
case 'm':
flags = MREMAP_MAYMOVE;
@@ -642,7 +629,7 @@ mremap_f(
if (optind != argc - 1)
return command_usage(&mremap_cmd);
- new_length = cvtnum(blocksize, sectsize, argv[optind]);
+ new_length = io_cvtnum(argv[optind]);
if (new_length < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
@@ -576,11 +589,9 @@ extsize_f(
int argc,
char **argv)
{
- size_t blocksize, sectsize;
int c;
recurse_all = recurse_dir = 0;
- init_cvtnum(&blocksize, §size);
while ((c = getopt(argc, argv, "DR")) != EOF) {
switch (c) {
case 'D':
@@ -597,7 +608,7 @@ extsize_f(
}
if (optind < argc) {
- extsize = (long)cvtnum(blocksize, sectsize, argv[optind]);
+ extsize = (long)io_cvtnum(argv[optind]);
if (extsize < 0) {
printf(_("non-numeric extsize argument -- %s\n"),
argv[optind]);
@@ -381,7 +381,6 @@ pread_f(
off64_t offset;
unsigned int zeed = 0;
long long count, total, tmp;
- size_t fsblocksize, fssectsize;
struct timeval t1, t2;
char *sp;
int Cflag, qflag, uflag, vflag;
@@ -389,13 +388,13 @@ pread_f(
int c;
Cflag = qflag = uflag = vflag = 0;
- init_cvtnum(&fsblocksize, &fssectsize);
- bsize = fsblocksize;
+ bsize = file->geom.blocksize;
+ ASSERT(bsize);
while ((c = getopt(argc, argv, "b:BCFRquvV:Z:")) != EOF) {
switch (c) {
case 'b':
- tmp = cvtnum(fsblocksize, fssectsize, optarg);
+ tmp = io_cvtnum(optarg);
if (tmp < 0) {
printf(_("non-numeric bsize -- %s\n"), optarg);
return 0;
@@ -447,7 +446,7 @@ pread_f(
if (optind != argc - 2)
return command_usage(&pread_cmd);
- offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0 && (direction & (IO_RANDOM|IO_BACKWARD))) {
eof = -1; /* read from EOF */
} else if (offset < 0) {
@@ -455,7 +454,7 @@ pread_f(
return 0;
}
optind++;
- count = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ count = io_cvtnum(argv[optind]);
if (count < 0 && (direction & (IO_RANDOM|IO_FORWARD))) {
eof = -1; /* read to EOF */
} else if (count < 0) {
@@ -63,17 +63,14 @@ offset_length(
char *length,
xfs_flock64_t *segment)
{
- size_t blocksize, sectsize;
-
- init_cvtnum(&blocksize, §size);
memset(segment, 0, sizeof(*segment));
segment->l_whence = SEEK_SET;
- segment->l_start = cvtnum(blocksize, sectsize, offset);
+ segment->l_start = io_cvtnum(offset);
if (segment->l_start < 0) {
printf(_("non-numeric offset argument -- %s\n"), offset);
return 0;
}
- segment->l_len = cvtnum(blocksize, sectsize, length);
+ segment->l_len = io_cvtnum(length);
if (segment->l_len < 0) {
printf(_("non-numeric length argument -- %s\n"), length);
return 0;
@@ -252,7 +252,6 @@ pwrite_f(
off64_t offset, skip = 0;
long long count, total, tmp;
unsigned int zeed = 0, seed = 0xcdcdcdcd;
- size_t fsblocksize, fssectsize;
struct timeval t1, t2;
char *sp, *infile = NULL;
int Cflag, qflag, uflag, dflag, wflag, Wflag;
@@ -260,13 +259,13 @@ pwrite_f(
int c, fd = -1;
Cflag = qflag = uflag = dflag = wflag = Wflag = 0;
- init_cvtnum(&fsblocksize, &fssectsize);
- bsize = fsblocksize;
+ bsize = file->geom.blocksize;
+ ASSERT(bsize);
while ((c = getopt(argc, argv, "b:BCdf:Fi:qRs:S:uV:wWZ:")) != EOF) {
switch (c) {
case 'b':
- tmp = cvtnum(fsblocksize, fssectsize, optarg);
+ tmp = io_cvtnum(optarg);
if (tmp < 0) {
printf(_("non-numeric bsize -- %s\n"), optarg);
return 0;
@@ -293,7 +292,7 @@ pwrite_f(
infile = optarg;
break;
case 's':
- skip = cvtnum(fsblocksize, fssectsize, optarg);
+ skip = io_cvtnum(optarg);
if (skip < 0) {
printf(_("non-numeric skip -- %s\n"), optarg);
return 0;
@@ -341,13 +340,13 @@ pwrite_f(
return command_usage(&pwrite_cmd);
if (infile && direction != IO_FORWARD)
return command_usage(&pwrite_cmd);
- offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"), argv[optind]);
return 0;
}
optind++;
- count = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ count = io_cvtnum(argv[optind]);
if (count < 0) {
printf(_("non-numeric length argument -- %s\n"), argv[optind]);
return 0;
@@ -140,7 +140,6 @@ readdir_f(
int cnt;
unsigned long long total;
int c;
- size_t fsblocksize, fssectsize;
struct timeval t1, t2;
char s1[64], s2[64], ts[64];
long long offset = -1;
@@ -149,15 +148,13 @@ readdir_f(
DIR *dir;
int dfd;
- init_cvtnum(&fsblocksize, &fssectsize);
-
while ((c = getopt(argc, argv, "l:o:v")) != EOF) {
switch (c) {
case 'l':
- length = cvtnum(fsblocksize, fssectsize, optarg);
+ length = io_cvtnum(optarg);
break;
case 'o':
- offset = cvtnum(fsblocksize, fssectsize, optarg);
+ offset = io_cvtnum(optarg);
break;
case 'v':
verbose = 1;
@@ -113,12 +113,10 @@ dedupe_f(
long long count, total;
char *infile;
int condensed, quiet_flag;
- size_t fsblocksize, fssectsize;
struct timeval t1, t2;
int c, ops = 0, fd = -1;
condensed = quiet_flag = 0;
- init_cvtnum(&fsblocksize, &fssectsize);
while ((c = getopt(argc, argv, "Cq")) != EOF) {
switch (c) {
@@ -136,19 +134,19 @@ dedupe_f(
return command_usage(&dedupe_cmd);
infile = argv[optind];
optind++;
- soffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ soffset = io_cvtnum(argv[optind]);
if (soffset < 0) {
printf(_("non-numeric src offset argument -- %s\n"), argv[optind]);
return 0;
}
optind++;
- doffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ doffset = io_cvtnum(argv[optind]);
if (doffset < 0) {
printf(_("non-numeric dest offset argument -- %s\n"), argv[optind]);
return 0;
}
optind++;
- count = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ count = io_cvtnum(argv[optind]);
if (count < 0) {
printf(_("non-positive length argument -- %s\n"), argv[optind]);
return 0;
@@ -233,13 +231,11 @@ reflink_f(
long long count = 0, total;
char *infile = NULL;
int condensed, quiet_flag;
- size_t fsblocksize, fssectsize;
struct timeval t1, t2;
int c, ops = 0, fd = -1;
condensed = quiet_flag = 0;
doffset = soffset = 0;
- init_cvtnum(&fsblocksize, &fssectsize);
while ((c = getopt(argc, argv, "Cq")) != EOF) {
switch (c) {
@@ -259,19 +255,19 @@ reflink_f(
optind++;
if (optind == argc)
goto clone_all;
- soffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ soffset = io_cvtnum(argv[optind]);
if (soffset < 0) {
printf(_("non-numeric src offset argument -- %s\n"), argv[optind]);
return 0;
}
optind++;
- doffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ doffset = io_cvtnum(argv[optind]);
if (doffset < 0) {
printf(_("non-numeric dest offset argument -- %s\n"), argv[optind]);
return 0;
}
optind++;
- count = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ count = io_cvtnum(argv[optind]);
if (count < 0) {
printf(_("non-positive length argument -- %s\n"), argv[optind]);
return 0;
@@ -33,7 +33,7 @@ resblks_f(
long long blks;
if (argc == 2) {
- blks = cvtnum(file->geom.blocksize, file->geom.sectsize, argv[1]);
+ blks = io_cvtnum(argv[1]);
if (blks < 0) {
printf(_("non-numeric argument -- %s\n"), argv[1]);
return 0;
@@ -105,14 +105,12 @@ seek_f(
char **argv)
{
off64_t offset, start;
- size_t fsblocksize, fssectsize;
int c;
int current; /* specify data or hole */
int flag;
int startflag;
flag = startflag = 0;
- init_cvtnum(&fsblocksize, &fssectsize);
while ((c = getopt(argc, argv, "adhrs")) != EOF) {
switch (c) {
@@ -138,7 +136,7 @@ seek_f(
if (!(flag & (SEEK_DFLAG | SEEK_HFLAG)) || optind != argc - 1)
return command_usage(&seek_cmd);
- start = offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
+ start = offset = io_cvtnum(argv[optind]);
if (offset < 0)
return command_usage(&seek_cmd);
@@ -79,14 +79,12 @@ sendfile_f(
{
off64_t offset = 0;
long long count, total;
- size_t blocksize, sectsize;
struct timeval t1, t2;
char *infile = NULL;
int Cflag, qflag;
int c, fd = -1;
Cflag = qflag = 0;
- init_cvtnum(&blocksize, §size);
while ((c = getopt(argc, argv, "Cf:i:q")) != EOF) {
switch (c) {
case 'C':
@@ -119,14 +117,14 @@ sendfile_f(
return 0;
if (optind == argc - 2) {
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
goto done;
}
optind++;
- count = cvtnum(blocksize, sectsize, argv[optind]);
+ count = io_cvtnum(argv[optind]);
if (count < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -44,7 +44,6 @@ sync_range_f(
{
off64_t offset = 0, length = 0;
int c, sync_mode = 0;
- size_t blocksize, sectsize;
while ((c = getopt(argc, argv, "abw")) != EOF) {
switch (c) {
@@ -68,15 +67,14 @@ sync_range_f(
if (optind != argc - 2)
return command_usage(&sync_range_cmd);
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[optind]);
+ offset = io_cvtnum(argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
+ length = io_cvtnum(argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
@@ -29,10 +29,8 @@ truncate_f(
char **argv)
{
off64_t offset;
- size_t blocksize, sectsize;
- init_cvtnum(&blocksize, §size);
- offset = cvtnum(blocksize, sectsize, argv[1]);
+ offset = io_cvtnum(argv[1]);
if (offset < 0) {
printf(_("non-numeric truncate argument -- %s\n"), argv[1]);
return 0;
Now that we set blcok & sector size into each file's geometry, even for foreign files, add a new wrapper io_cvtnum() which passes the current file's ->geom into cvtnum() rather than needing to fill in local vars via cvtnum_init, only to pass them back into cvtnum(). Switch all cvtnum() to io_cvtnum(), and remove cvtnum_init(). Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- cowextsize.c | 4 +--- fadvise.c | 7 ++----- fsmap.c | 7 ++----- init.c | 19 ++++++++----------- init.h | 2 +- madvise.c | 6 ++---- mincore.c | 6 ++---- mmap.c | 35 +++++++++++------------------------ open.c | 27 +++++++++++++++++++-------- pread.c | 11 +++++------ prealloc.c | 7 ++----- pwrite.c | 13 ++++++------- readdir.c | 7 ++----- reflink.c | 16 ++++++---------- resblks.c | 2 +- seek.c | 4 +--- sendfile.c | 6 ++---- sync_file_range.c | 6 ++---- truncate.c | 4 +--- 19 files changed, 76 insertions(+), 113 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html