xfstests: randholes: encapsulate argument parsing
PATCH 10/11 xfstests: randholes: encapsulate argument parsing
Move the argument parsing code out of main() and into a separate parseargs() routine. The name of the target file for the test is returned by parseargs() if no error occurs.
Signed-off-by Alex Elder <[email protected]>
--- src/randholes.c | 134 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 75 insertions(+), 59 deletions(-)
src/randholes.c +75 -59
@@ -81,6 +81,76 @@ usage(char *progname)exit (1 ); } +/* Returns filename if successful or a null pointer if an error occurs */ + +static char * +parseargs (int argc,char *argv[]) +{ +int seed; +int ch; + + filesize =DEFAULT_FILESIZE ; + blocksize =DEFAULT_BLOCKSIZE ; + count = (int ) filesize / blocksize; + verbose =0 ; + wsync =0 ; + seed =time (NULL ); + test =0 ; +while ((ch =getopt (argc, argv,"b:l:s:c:o:x:vwdrapt" )) !=EOF ) { +switch (ch) { +case 'b' : blocksize =atoi (optarg);break ; +case 'l' : filesize =strtoull (optarg,NULL ,16 );break ; +case 's' : seed =atoi (optarg);break ; +case 'c' : count =atoi (optarg);break ; +case 'o' : fileoffset =strtoull (optarg,NULL ,16 );break ; +case 'x' : extsize =atoi (optarg);break ; +case 'v' : verbose++;break ; +case 'w' : wsync++;break ; +case 'd' : direct++;break ; +case 'r' : rt++; direct++;break ; +case 'a' : alloconly++;break ; +case 'p' : preserve++;break ; +case 't' : test++; preserve++;break ; +default :usage (argv[0 ]);break ; + } + } +if (optind != argc -1 ) +usage (argv[0 ]); + +if ((filesize % blocksize) !=0 ) { + filesize -= filesize % blocksize; +printf ("filesize not a multiple of blocksize, reducing filesize to %llu\n" , + (unsigned long long )filesize); + } +if ((fileoffset % blocksize) !=0 ) { + fileoffset -= fileoffset % blocksize; +printf ("fileoffset not a multiple of blocksize, reducing fileoffset to %llu\n" , + (unsigned long long )fileoffset); + } +if (count > (filesize/blocksize)) { + count = (filesize/blocksize); +printf ("count of blocks written is too large, setting to %d\n" , + count); + }else if (count <1 ) { + count =1 ; +printf ("count of blocks written is too small, setting to %d\n" , + count); + } +printf ("randholes: Seed = %d (use \"-s %d\" to re-execute this test)\n" , seed, seed); +srandom (seed); + +printf ("randholes: blocksize=%d, filesize=%llu, seed=%d\n" +"randholes: count=%d, offset=%llu, extsize=%d\n" , + blocksize, (unsigned long long )filesize, seed, + count, (unsigned long long )fileoffset, extsize); +printf ("randholes: verbose=%d, wsync=%d, direct=%d, rt=%d, alloconly=%d, preserve=%d, test=%d\n" , + verbose, wsync, direct ?1 :0 , rt, alloconly, preserve, test); + +/* Last argument is the file name. Return it. */ + +return argv[optind];/* Success */ +} +int findblock (void ) {
@@ -330,68 +400,14 @@ realtime_setup(char *filename, int fd)int main (int argc,char *argv[]) { -int seed, ch, fd, oflags; -char *filename =NULL ; +int fd, oflags; +char *filename;int r;size_t alignment; - filesize =DEFAULT_FILESIZE ; - blocksize =DEFAULT_BLOCKSIZE ; - count = (int ) filesize / blocksize; - verbose =0 ; - wsync =0 ; - seed =time (NULL ); - test =0 ; -while ((ch =getopt (argc, argv,"b:l:s:c:o:x:vwdrapt" )) !=EOF ) { -switch (ch) { -case 'b' : blocksize =atoi (optarg);break ; -case 'l' : filesize =strtoull (optarg,NULL ,16 );break ; -case 's' : seed =atoi (optarg);break ; -case 'c' : count =atoi (optarg);break ; -case 'o' : fileoffset =strtoull (optarg,NULL ,16 );break ; -case 'x' : extsize =atoi (optarg);break ; -case 'v' : verbose++;break ; -case 'w' : wsync++;break ; -case 'd' : direct++;break ; -case 'r' : rt++; direct++;break ; -case 'a' : alloconly++;break ; -case 'p' : preserve++;break ; -case 't' : test++; preserve++;break ; -default :usage (argv[0 ]);break ; - } - } -if (optind == argc-1 ) - filename = argv[optind]; -else -usage (argv[0 ]); -if ((filesize % blocksize) !=0 ) { - filesize -= filesize % blocksize; -printf ("filesize not a multiple of blocksize, reducing filesize to %llu\n" , - (unsigned long long )filesize); - } -if ((fileoffset % blocksize) !=0 ) { - fileoffset -= fileoffset % blocksize; -printf ("fileoffset not a multiple of blocksize, reducing fileoffset to %llu\n" , - (unsigned long long )fileoffset); - } -if (count > (filesize/blocksize)) { - count = (filesize/blocksize); -printf ("count of blocks written is too large, setting to %d\n" , - count); - }else if (count <1 ) { - count =1 ; -printf ("count of blocks written is too small, setting to %d\n" , - count); - } -printf ("randholes: Seed = %d (use \"-s %d\" to re-execute this test)\n" , seed, seed); -srandom (seed); - -printf ("randholes: blocksize=%d, filesize=%llu, seed=%d\n" -"randholes: count=%d, offset=%llu, extsize=%d\n" , - blocksize, (unsigned long long )filesize, seed, - count, (unsigned long long )fileoffset, extsize); -printf ("randholes: verbose=%d, wsync=%d, direct=%d, rt=%d, alloconly=%d, preserve=%d, test=%d\n" , - verbose, wsync, direct ?1 :0 , rt, alloconly, preserve, test); + filename =parseargs (argc, argv); +if (! filename) +return 1 ;/* * Open the file, write rand block in random places, read them all
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs