parse.c revision 77e42cafa8942eba6e7706c9d9c25a04ec7cdda5
16e112132382b6442b636ee39b02951d771408e8frobbiew/*
26e112132382b6442b636ee39b02951d771408e8frobbiew* Disktest
36e112132382b6442b636ee39b02951d771408e8frobbiew* Copyright (c) International Business Machines Corp., 2001
46e112132382b6442b636ee39b02951d771408e8frobbiew*
56e112132382b6442b636ee39b02951d771408e8frobbiew*
66e112132382b6442b636ee39b02951d771408e8frobbiew* This program is free software; you can redistribute it and/or modify
76e112132382b6442b636ee39b02951d771408e8frobbiew* it under the terms of the GNU General Public License as published by
86e112132382b6442b636ee39b02951d771408e8frobbiew* the Free Software Foundation; either version 2 of the License, or
96e112132382b6442b636ee39b02951d771408e8frobbiew* (at your option) any later version.
106e112132382b6442b636ee39b02951d771408e8frobbiew*
116e112132382b6442b636ee39b02951d771408e8frobbiew* This program is distributed in the hope that it will be useful,
126e112132382b6442b636ee39b02951d771408e8frobbiew* but WITHOUT ANY WARRANTY; without even the implied warranty of
136e112132382b6442b636ee39b02951d771408e8frobbiew* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
146e112132382b6442b636ee39b02951d771408e8frobbiew* GNU General Public License for more details.
156e112132382b6442b636ee39b02951d771408e8frobbiew*
166e112132382b6442b636ee39b02951d771408e8frobbiew* You should have received a copy of the GNU General Public License
176e112132382b6442b636ee39b02951d771408e8frobbiew* along with this program; if not, write to the Free Software
186e112132382b6442b636ee39b02951d771408e8frobbiew* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
196e112132382b6442b636ee39b02951d771408e8frobbiew*
206e112132382b6442b636ee39b02951d771408e8frobbiew*  Please send e-mail to yardleyb@us.ibm.com if you have
216e112132382b6442b636ee39b02951d771408e8frobbiew*  questions or comments.
226e112132382b6442b636ee39b02951d771408e8frobbiew*
236e112132382b6442b636ee39b02951d771408e8frobbiew*  Project Website:  TBD
246e112132382b6442b636ee39b02951d771408e8frobbiew*
2577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak* $Id: parse.c,v 1.6 2008/02/14 08:22:23 subrata_modak Exp $
266e112132382b6442b636ee39b02951d771408e8frobbiew*
276e112132382b6442b636ee39b02951d771408e8frobbiew*/
286e112132382b6442b636ee39b02951d771408e8frobbiew#include <sys/types.h>
296e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdio.h>
306e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdlib.h>
316e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdarg.h>
326e112132382b6442b636ee39b02951d771408e8frobbiew#include <signal.h>
336e112132382b6442b636ee39b02951d771408e8frobbiew#include <time.h>
346e112132382b6442b636ee39b02951d771408e8frobbiew#include <errno.h>
356e112132382b6442b636ee39b02951d771408e8frobbiew#include <fcntl.h>
366e112132382b6442b636ee39b02951d771408e8frobbiew#include <string.h>
376e112132382b6442b636ee39b02951d771408e8frobbiew#include <ctype.h>
3877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#include <sys/stat.h>
396e112132382b6442b636ee39b02951d771408e8frobbiew
406e112132382b6442b636ee39b02951d771408e8frobbiew#include "globals.h"
416e112132382b6442b636ee39b02951d771408e8frobbiew#include "threading.h"
426e112132382b6442b636ee39b02951d771408e8frobbiew#include "main.h"
436e112132382b6442b636ee39b02951d771408e8frobbiew#include "usage.h"
446e112132382b6442b636ee39b02951d771408e8frobbiew#include "sfunc.h"
456e112132382b6442b636ee39b02951d771408e8frobbiew#include "parse.h"
466e112132382b6442b636ee39b02951d771408e8frobbiew
476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiewint fill_cld_args(int argc, char **argv, child_args_t *args)
486e112132382b6442b636ee39b02951d771408e8frobbiew{
496e112132382b6442b636ee39b02951d771408e8frobbiew	extern char *optarg;
506e112132382b6442b636ee39b02951d771408e8frobbiew	extern int optind;
516e112132382b6442b636ee39b02951d771408e8frobbiew	extern unsigned long glb_flags;
526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	signed char c;
546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char *leftovers;
556e112132382b6442b636ee39b02951d771408e8frobbiew
5677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	while((c = getopt(argc, argv, "?a:A:B:cC:dD:E:f:Fh:I:K:L:m:M:nN:o:p:P:qQrR:s:S:t:T:wvV:z")) != -1) {
576e112132382b6442b636ee39b02951d771408e8frobbiew		switch(c) {
586e112132382b6442b636ee39b02951d771408e8frobbiew			case ':' :
59d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				pMsg(WARN, args, "Missing argument for perameter.\n");
606e112132382b6442b636ee39b02951d771408e8frobbiew				usage();
616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				return(-1);
626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'V' :
6377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
646e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
65d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
666e112132382b6442b636ee39b02951d771408e8frobbiew					exit(1);
676e112132382b6442b636ee39b02951d771408e8frobbiew				}
686e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
69d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c argument is non numeric.\n", c);
706e112132382b6442b636ee39b02951d771408e8frobbiew					exit(1);
716e112132382b6442b636ee39b02951d771408e8frobbiew				}
726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				gbl_dbg_lvl = atoi(optarg);
7377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#else
7477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				pMsg(ERR, args, "Debug code not compiled in, recompile with _DEBUG directive.\n", c);
7577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				exit(1);
7677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
776e112132382b6442b636ee39b02951d771408e8frobbiew				break;
786e112132382b6442b636ee39b02951d771408e8frobbiew			case 'd' :
796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				glb_flags |= GLB_FLG_QUIET;
806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->flags |= CLD_FLG_DUMP;
816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				break;
826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'a' :
836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(optarg == NULL) {
84d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(!isdigit(optarg[0])) {
88d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
9177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->seed = (unsigned int) strtol(optarg, NULL, 0);
926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				break;
936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'A' :
9477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(optarg == NULL) {
9577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					pMsg(WARN, args, "-%c option requires an argument.\n", c);
9677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					exit(1);
9777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
9877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'g')) {
9977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					glb_flags |= GLB_FLG_KILL;
10077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
10177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'c')) {
10277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags &= ~CLD_FLG_ALLDIE;
10377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
10477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'m')) {
10577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_ERR_MARK;
10677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
10777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'r')) {
10877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags &= ~CLD_FLG_ERR_REREAD;
10977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
11077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'s')) {
11177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags &= ~CLD_FLG_LBA_SYNC;
11277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
11377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'S')) {
11477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_IO_SERIAL;
11577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
11677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'w')) {
11777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_WRITE_ONCE;
11877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
11977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'W')) {
12077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_UNIQ_WRT;
12177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
12277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'t')) {
12377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_TMO_ERROR;
12477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
1256e112132382b6442b636ee39b02951d771408e8frobbiew				break;
1266e112132382b6442b636ee39b02951d771408e8frobbiew			case 'q' :
1276e112132382b6442b636ee39b02951d771408e8frobbiew				glb_flags |= GLB_FLG_QUIET;
1286e112132382b6442b636ee39b02951d771408e8frobbiew				break;
1296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'Q' :
1306b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				glb_flags |= GLB_FLG_SUPRESS;
1316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				break;
1326e112132382b6442b636ee39b02951d771408e8frobbiew			case 'v' :
133d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				pMsg(INFO, args, "Version %s\n", VER_STR);
1346e112132382b6442b636ee39b02951d771408e8frobbiew				exit(0);
1356e112132382b6442b636ee39b02951d771408e8frobbiew			case 'p' :
1366e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
137d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
1386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
1396b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
1406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(args->flags & (CLD_FLG_LINEAR|CLD_FLG_RANDOM)) {
141d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Only one seek type, -p, can be specified.\n");
1426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
1436e112132382b6442b636ee39b02951d771408e8frobbiew				}
1446e112132382b6442b636ee39b02951d771408e8frobbiew				/* seek pattern type */
1456e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'L'))
1466e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_LINEAR;
1476e112132382b6442b636ee39b02951d771408e8frobbiew				else if (strchr(optarg,'l'))
1486e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= (CLD_FLG_LINEAR|CLD_FLG_NTRLVD);
14977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				else if (strchr(optarg,'R'))
1506e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_RANDOM;
15177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				else if (strchr(optarg,'r'))
15277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= (CLD_FLG_RANDOM|CLD_FLG_NTRLVD);
1536e112132382b6442b636ee39b02951d771408e8frobbiew				else {
154d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Unknown Seek pattern\n");
1556e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
1566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
1576e112132382b6442b636ee39b02951d771408e8frobbiew				}
1586e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'U') || strchr(optarg,'u'))
1596e112132382b6442b636ee39b02951d771408e8frobbiew					if((args->flags & (CLD_FLG_LINEAR)) &&
1606e112132382b6442b636ee39b02951d771408e8frobbiew							!(args->flags & CLD_FLG_LUND))
1616e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_LUNU;
1626e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'D') || strchr(optarg,'d'))
1636e112132382b6442b636ee39b02951d771408e8frobbiew					if((args->flags & (CLD_FLG_LINEAR)) &&
1646e112132382b6442b636ee39b02951d771408e8frobbiew							!(args->flags & CLD_FLG_LUNU))
1656e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_LUND;
1666e112132382b6442b636ee39b02951d771408e8frobbiew				break;
1676e112132382b6442b636ee39b02951d771408e8frobbiew			case 'B' :
1686e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
169d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
1706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
1716e112132382b6442b636ee39b02951d771408e8frobbiew				}
1726e112132382b6442b636ee39b02951d771408e8frobbiew				if(strchr(optarg,':') != NULL) { /* we are given a range of transfer sizes */
1736e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_RTRSIZ;
1746e112132382b6442b636ee39b02951d771408e8frobbiew					args->ltrsiz = strtoul(optarg, &leftovers, 10);
1756e112132382b6442b636ee39b02951d771408e8frobbiew					if(leftovers == strchr(leftovers,'k')) { /* first value had a 'k' */
1766e112132382b6442b636ee39b02951d771408e8frobbiew						args->ltrsiz *= 2;
1776e112132382b6442b636ee39b02951d771408e8frobbiew						leftovers++;
17877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers, 'm')) {	/* first value had a 'm' */
17977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ltrsiz *= (2 * 1024);
18077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						leftovers++;
1816e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
1826e112132382b6442b636ee39b02951d771408e8frobbiew						if (args->ltrsiz > 256)
1836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew							args->ltrsiz /= BLK_SIZE;
1846e112132382b6442b636ee39b02951d771408e8frobbiew					}
1856e112132382b6442b636ee39b02951d771408e8frobbiew					if(!isdigit(leftovers[1])) {
186d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
1876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
1886e112132382b6442b636ee39b02951d771408e8frobbiew					}
1896e112132382b6442b636ee39b02951d771408e8frobbiew					args->htrsiz = atol((char *)strchr(leftovers,':')+1);
1906e112132382b6442b636ee39b02951d771408e8frobbiew					if((strchr(leftovers,'k')) != NULL) {/* second value had a 'k' */
1916e112132382b6442b636ee39b02951d771408e8frobbiew						args->htrsiz *= 2;
19277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if((strchr(leftovers,'m')) != NULL) {	/* second value had a 'm' */
19377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->htrsiz *= (2 * 1024);
1946e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
1956e112132382b6442b636ee39b02951d771408e8frobbiew						if (args->htrsiz > 256)
1966e112132382b6442b636ee39b02951d771408e8frobbiew							   args->htrsiz /= BLK_SIZE;
1976e112132382b6442b636ee39b02951d771408e8frobbiew					}
1986e112132382b6442b636ee39b02951d771408e8frobbiew				} else { /* only a single value given for transfer size */
19977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->ltrsiz = atoi(optarg);
2006e112132382b6442b636ee39b02951d771408e8frobbiew					if(strchr(optarg,'k')) {
2016e112132382b6442b636ee39b02951d771408e8frobbiew						args->ltrsiz *= 2;
20277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(strchr(optarg,'m')) {
20377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ltrsiz *= (2 * 1024);
2046e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
2056e112132382b6442b636ee39b02951d771408e8frobbiew						if (args->ltrsiz > 256)
2066e112132382b6442b636ee39b02951d771408e8frobbiew							   args->ltrsiz /= BLK_SIZE;
2076e112132382b6442b636ee39b02951d771408e8frobbiew					}
2086e112132382b6442b636ee39b02951d771408e8frobbiew					args->htrsiz = args->ltrsiz;
2096e112132382b6442b636ee39b02951d771408e8frobbiew				}
21077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
21177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				PDBG5(DBUG, args, "Parsed Transfer size: %ld\n", args->htrsiz);
21277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
2136e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2146e112132382b6442b636ee39b02951d771408e8frobbiew			case 'c' :
2156e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
216d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2176e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2196e112132382b6442b636ee39b02951d771408e8frobbiew				}
2206e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_CPTYPE;
2216e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2226e112132382b6442b636ee39b02951d771408e8frobbiew			case 'n' :
2236e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
224d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2256e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2276e112132382b6442b636ee39b02951d771408e8frobbiew				}
2286e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_LPTYPE;
2296e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2306e112132382b6442b636ee39b02951d771408e8frobbiew			case 'f' :
2316e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
232d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
2336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2346e112132382b6442b636ee39b02951d771408e8frobbiew				}
2356e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
236d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2376e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2396e112132382b6442b636ee39b02951d771408e8frobbiew				}
2406e112132382b6442b636ee39b02951d771408e8frobbiew				args->pattern = my_strtofft(optarg);
2416e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_FPTYPE;
2426e112132382b6442b636ee39b02951d771408e8frobbiew				break;
243d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			case 'F' :
244d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				/* the filespec is a list of filespecs in a file */
245d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_FSLIST;
246d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				break;
2476e112132382b6442b636ee39b02951d771408e8frobbiew			case 'z' :
2486e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
249d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2506e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2526e112132382b6442b636ee39b02951d771408e8frobbiew				}
2536e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_RPTYPE;
2546e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2556e112132382b6442b636ee39b02951d771408e8frobbiew			case 'h' :
2566e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
257d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
2586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2596e112132382b6442b636ee39b02951d771408e8frobbiew				}
2606e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
261d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
2626e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2646e112132382b6442b636ee39b02951d771408e8frobbiew				}
265d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_HBEAT;
2666e112132382b6442b636ee39b02951d771408e8frobbiew				args->hbeat = atoi(optarg);
2676b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,'m')) {	/* multiply by sec */
2686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->hbeat *= 60;
2696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'h')) { /* multiply sec*min */
2706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->hbeat *= (time_t) (60*60);
2716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'d')) { /* multiply by sec*min*hours */
2726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->hbeat *= (time_t) (60*60*24);
2736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
2746e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2756e112132382b6442b636ee39b02951d771408e8frobbiew			case 'D' :
2766e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
277d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
2786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2796e112132382b6442b636ee39b02951d771408e8frobbiew				}
2806e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
281d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
2826e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2846e112132382b6442b636ee39b02951d771408e8frobbiew				}
2856e112132382b6442b636ee39b02951d771408e8frobbiew				args->rperc = atoi(optarg);
2866e112132382b6442b636ee39b02951d771408e8frobbiew				args->wperc = atoi((char *)(strchr(optarg,':')+1));
2876e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_DUTY;
2886e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2896e112132382b6442b636ee39b02951d771408e8frobbiew			case 'r' :
2906e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_R;
2916e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2926e112132382b6442b636ee39b02951d771408e8frobbiew			case 'w' :
2936e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_W;
2946e112132382b6442b636ee39b02951d771408e8frobbiew				break;
29577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			case 'o' :
2966e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
297d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
2986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2996e112132382b6442b636ee39b02951d771408e8frobbiew				}
30077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->offset = atol(optarg);
30177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_OFFSET;
3026e112132382b6442b636ee39b02951d771408e8frobbiew				break;
30377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			case 'R' :
3046e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
305d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3076e112132382b6442b636ee39b02951d771408e8frobbiew				}
30877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(strchr(optarg,':') != NULL) { /* we are given a retry delay */
30977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->retries = strtol(optarg, &leftovers, 10);
31077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->retry_delay = (time_t) atol((char *)strchr(leftovers,':')+1);
31177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				} else { /* only a retry count given */
31277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->retries = atoi(optarg);
31377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
31477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				break;
31577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			case 'M' :
31677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(optarg == NULL) {
31777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3196e112132382b6442b636ee39b02951d771408e8frobbiew				}
32077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_ALT_MARK;
32177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->alt_mark = my_strtofft(optarg);
32277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				break;
32377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			case 'm' :
3246e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_MBLK;
32577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(optarg == NULL) {
32677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					pMsg(WARN, args, "-%c option requires an argument.\n", c);
32777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					return(-1);
32877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
32977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'l')) { /* returns NULL if char is not found */
33077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_LBA;
33177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
33277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'p')) {
33377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_PASS;
33477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
33577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'t')) {
33677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_TIME;
33777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
33877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'s')) {
33977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_SEED;
34077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
34177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'h')) {
34277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_HOST;
34377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
34477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'f')) {
34577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_TARGET;
34677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
34777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'a')) {
34877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->flags |= CLD_FLG_MRK_ALL;
34977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
35077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (!strchr(optarg,'l') &&
35177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						!strchr(optarg,'p') &&
35277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						!strchr(optarg,'t') &&
35377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						!strchr(optarg,'s') &&
35477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						!strchr(optarg,'h') &&
35577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						!strchr(optarg,'f') &&
35677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						!strchr(optarg,'a')) {
35777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					pMsg(WARN, args, "Unknown header mark option\n");
35877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					return(-1);
35977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
3606e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3616e112132382b6442b636ee39b02951d771408e8frobbiew			case 'E' :
3626e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
363d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3656e112132382b6442b636ee39b02951d771408e8frobbiew				}
3666e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
367d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments are non numeric.\n", c);
3686e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
3696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3706e112132382b6442b636ee39b02951d771408e8frobbiew				}
3716e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_CMPR;
3726e112132382b6442b636ee39b02951d771408e8frobbiew				args->cmp_lng = strtol(optarg,NULL,0);
37377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(strchr(optarg,'k')) {	/* multiply by 2^10 */
37477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->cmp_lng <<= 10;
37577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				} else if(strchr(optarg,'K')) { /* multiply 10^3 */
37677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->cmp_lng *= 1000;
37777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				} else if(strchr(optarg,'m')) { /* multiply by 2^20 */
37877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->cmp_lng <<= 20;
37977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				} else if(strchr(optarg,'M')) { /* multiply by 10^6 */
38077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->cmp_lng *= 1000000;
38177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
3826e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3836e112132382b6442b636ee39b02951d771408e8frobbiew			case 'N' :
3846e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
385d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3876e112132382b6442b636ee39b02951d771408e8frobbiew				}
3886e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
389d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments are non numeric.\n", c);
3906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3916e112132382b6442b636ee39b02951d771408e8frobbiew				}
3926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->flags |= CLD_FLG_VSIZ;
3936e112132382b6442b636ee39b02951d771408e8frobbiew				args->vsiz = my_strtofft(optarg);
3946e112132382b6442b636ee39b02951d771408e8frobbiew				if(strchr(optarg,'k')) {	/* multiply by 2^10 */
3956e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz <<= 10;
3966e112132382b6442b636ee39b02951d771408e8frobbiew				} else if(strchr(optarg,'K')) { /* multiply 10^3 */
3976e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz *= 1000;
3986e112132382b6442b636ee39b02951d771408e8frobbiew				} else if(strchr(optarg,'m')) { /* multiply by 2^20 */
3996e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz <<= 20;
4006e112132382b6442b636ee39b02951d771408e8frobbiew				} else if(strchr(optarg,'M')) { /* multiply by 10^6 */
4016e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz *= 1000000;
4026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'g')) { /* multiply by 2^30 */
4036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->vsiz <<= 30;
4046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'G')) { /* multiply by 10^9 */
4056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->vsiz *= 1000000000;
4066e112132382b6442b636ee39b02951d771408e8frobbiew				}
4076e112132382b6442b636ee39b02951d771408e8frobbiew				break;
4086e112132382b6442b636ee39b02951d771408e8frobbiew			case 'I' :
4096e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
410d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
4116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4126e112132382b6442b636ee39b02951d771408e8frobbiew				}
4136e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'R') || strchr(optarg,'r')) {
4146e112132382b6442b636ee39b02951d771408e8frobbiew					if (!(args->flags & CLD_FLG_BLK) &&
4156e112132382b6442b636ee39b02951d771408e8frobbiew					    !(args->flags & CLD_FLG_FILE)) {
4166e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_RAW;
4176e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
418d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify one IO type\n");
4196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
4206e112132382b6442b636ee39b02951d771408e8frobbiew					}
4216e112132382b6442b636ee39b02951d771408e8frobbiew				}
4226e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'B') || strchr(optarg,'b')) {
4236e112132382b6442b636ee39b02951d771408e8frobbiew					if (!(args->flags & CLD_FLG_RAW) &&
4246e112132382b6442b636ee39b02951d771408e8frobbiew					    !(args->flags & CLD_FLG_FILE)) {
4256e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_BLK;
4266e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
427d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify one IO type\n");
4286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
4296e112132382b6442b636ee39b02951d771408e8frobbiew					}
4306e112132382b6442b636ee39b02951d771408e8frobbiew				}
4316e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'F') || strchr(optarg,'f')) {
4326e112132382b6442b636ee39b02951d771408e8frobbiew					if (!(args->flags & CLD_FLG_RAW) &&
4336e112132382b6442b636ee39b02951d771408e8frobbiew					    !(args->flags & CLD_FLG_BLK)) {
4346e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_FILE;
4356e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
436d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify one IO type\n");
4376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
4386e112132382b6442b636ee39b02951d771408e8frobbiew					}
4396e112132382b6442b636ee39b02951d771408e8frobbiew				}
440d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				if (strchr(optarg,'D') || strchr(optarg,'d')) {
4416e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_DIRECT;
442d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
44377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if (strchr(optarg,'s')) {
44477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->sync_interval = strtoul((char *)strchr(optarg,'s')+1, NULL, 10);
44577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
44677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					PDBG3(DBUG, args, "Parsed sync interval: %ld\n", args->sync_interval);
44777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
44877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					if((args->flags & CLD_FLG_DIRECT)) {
44977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						pMsg(ERR, args, "Can't specify sync with Direct IO\n");
450d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						return(-1);
451d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					}
452d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					args->flags |= CLD_FLG_WFSYNC;
453d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
4546e112132382b6442b636ee39b02951d771408e8frobbiew				break;
45577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			case 't' :
45677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(optarg == NULL) {
45777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					pMsg(WARN, args, "-%c option requires an argument.\n", c);
45877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					return(-1);
45977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
46077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
46177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				if(strchr(optarg,':') != NULL) { /* we are given a option for delay & timeout */
46277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->delayTimeMin = strtoul(optarg, &leftovers, 10);
46377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					/* check to see if we have one or more then one ':' */
46477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					if((char *)strchr(optarg,':') == (char *)strrchr(optarg,':')) {
46577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						/* only one ':', assume no random delayTime, and ioTimeout */
46677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->delayTimeMax = args->delayTimeMin;
46777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ioTimeout = (time_t) atol((char *)strchr(leftovers,':')+1);
46877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else {
46977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						/* more then one ':', assume random delayTime, and ioTimeout */
47077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->delayTimeMax = strtoul(leftovers+1, &leftovers, 10);
47177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ioTimeout = (time_t) atol((char *)strchr(leftovers,':')+1);
47277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					}
47377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					if(strchr(leftovers,'m')) {	/* multiply by sec */
47477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ioTimeout *= 60;
47577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(strchr(leftovers,'h')) { /* multiply sec*min */
47677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ioTimeout *= (time_t) (60*60);
47777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(strchr(leftovers,'d')) { /* multiply by sec*min*hours */
47877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->ioTimeout *= (time_t) (60*60*24);
47977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					}
48077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				} else {
48177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->delayTimeMin = strtoul(optarg, (char **)NULL, 10);
48277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->delayTimeMax = args->delayTimeMin;
48377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				}
48477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				break;
4856e112132382b6442b636ee39b02951d771408e8frobbiew			case 'T' :
4866e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
487d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
4886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4896e112132382b6442b636ee39b02951d771408e8frobbiew				}
4906e112132382b6442b636ee39b02951d771408e8frobbiew				args->run_time = atoi(optarg);
4916e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_TMD;
4926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,'m')) {	/* multiply by sec */
4936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->run_time *= 60;
4946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'h')) { /* multiply sec*min */
4956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->run_time *= (time_t) (60*60);
4966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'d')) { /* multiply by sec*min*hours */
4976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->run_time *= (time_t) (60*60*24);
4986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
4996e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5006e112132382b6442b636ee39b02951d771408e8frobbiew			case 'L' :
5016e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
502d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5046e112132382b6442b636ee39b02951d771408e8frobbiew				}
5056e112132382b6442b636ee39b02951d771408e8frobbiew				args->seeks = atoi(optarg);
5066e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_SKS;
5076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,'k')) {	/* multiply by 2^10 */
5086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks <<= 10;
5096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'K')) { /* multiply 10^3 */
5106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks *= 1000;
5116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'m')) { /* multiply by 2^20 */
5126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks <<= 20;
5136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'M')) { /* multiply by 10^6 */
5146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks *= 1000000;
5156b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'g')) { /* multiply by 2^30 */
5166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks <<= 30;
5176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'G')) { /* multiply by 10^9 */
5186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks *= 1000000000;
5196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
5206e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5216e112132382b6442b636ee39b02951d771408e8frobbiew			case 'C' :
5226e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
523d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5246b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5256e112132382b6442b636ee39b02951d771408e8frobbiew				}
5266e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
527d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5286e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
5296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5306e112132382b6442b636ee39b02951d771408e8frobbiew				}
5316e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_CYC;
5326e112132382b6442b636ee39b02951d771408e8frobbiew				args->cycles = atol(optarg);
5336e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5346e112132382b6442b636ee39b02951d771408e8frobbiew			case 'K' :
5356e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
536d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5386e112132382b6442b636ee39b02951d771408e8frobbiew				}
5396e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
540d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5416e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
5426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5436e112132382b6442b636ee39b02951d771408e8frobbiew				}
5446e112132382b6442b636ee39b02951d771408e8frobbiew				if(atoi(optarg) > MAX_THREADS) {
545d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "%u exceeds max of %u threads.\n", atoi(optarg), MAX_THREADS);
5466b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5476e112132382b6442b636ee39b02951d771408e8frobbiew				}
5486e112132382b6442b636ee39b02951d771408e8frobbiew				args->t_kids = atoi(optarg);
5496e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5506e112132382b6442b636ee39b02951d771408e8frobbiew			case 'P' :
5516e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
552d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5546e112132382b6442b636ee39b02951d771408e8frobbiew				}
5556e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'X')) { /* returns NULL if char is not found */
5566e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_XFERS;
5576e112132382b6442b636ee39b02951d771408e8frobbiew				}
5586e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'T')) {
5596e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_TPUTS;
5606e112132382b6442b636ee39b02951d771408e8frobbiew				}
5616e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'P')) {
5626e112132382b6442b636ee39b02951d771408e8frobbiew					glb_flags |= GLB_FLG_PERFP;
5636e112132382b6442b636ee39b02951d771408e8frobbiew				}
5646e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'R')) {
5656e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_RUNT;
5666e112132382b6442b636ee39b02951d771408e8frobbiew				}
567d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				if (strchr(optarg,'C')) {
568d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					args->flags |= CLD_FLG_PCYC;
569d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
5706e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'A')) {
571d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					args->flags |= CLD_FLG_PRFTYPS;
5726e112132382b6442b636ee39b02951d771408e8frobbiew				}
5736e112132382b6442b636ee39b02951d771408e8frobbiew				if (!strchr(optarg,'P') &&
5746e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'A') &&
5756e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'X') &&
5766e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'R') &&
577d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						!strchr(optarg,'C') &&
5786e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'T')) {
579d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Unknown performance option\n");
5806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5816e112132382b6442b636ee39b02951d771408e8frobbiew				}
5826e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5836e112132382b6442b636ee39b02951d771408e8frobbiew			case 'S' :
5846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(!isdigit((int)optarg[0])) {
585d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5876e112132382b6442b636ee39b02951d771408e8frobbiew				}
5886e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_BLK_RNG;
5896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,':') != NULL) { /* we are given a range */
59077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 0);
5916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
5926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 10;
5936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
5946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
5956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000;
5966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
5976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
5986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 20;
5996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000000;
6026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
60377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
60477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_blk <<= 30;
60577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						leftovers++;  /* at the ':' */
60677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
60777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_blk *= 1000000000;
60877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						leftovers++;  /* at the ':' */
6096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					leftovers++;  /* should be at the next value */
6116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(!isdigit((int) leftovers[0])) {
612d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
6136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
6146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
61577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->stop_blk = (OFF_T) strtoul(leftovers, &leftovers, 0);
6166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk <<= 10;
6186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk *= 1000;
6206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk <<= 20;
6226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk *= 1000000;
62477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
62577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->stop_blk <<= 30;
62677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
62777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->stop_blk *= 1000000000;
6286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else { /* only a single value given */
63077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 0);
6316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 10;
6336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000;
6356b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6366b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 20;
6376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000000;
63977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
64077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_blk <<= 30;
64177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
64277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_blk *= 1000000000;
6436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6446b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
6456e112132382b6442b636ee39b02951d771408e8frobbiew				break;
6466e112132382b6442b636ee39b02951d771408e8frobbiew			case 's' :
6476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(!isdigit((int)optarg[0])) {
648d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c argument is non numeric.\n", c);
6496b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
6506b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
6516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->flags |= CLD_FLG_LBA_RNG;
6526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,':') != NULL) { /* we are given a range */
65377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 0);
6546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6556b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 10;
6566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6576b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000;
6596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 20;
6626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000000;
6656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
66677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
66777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_lba <<= 30;
66877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						leftovers++;  /* at the ':' */
66977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
67077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_lba *= 1000000000;
67177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						leftovers++;  /* at the ':' */
6726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					leftovers++;  /* should be at the next value */
6746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(!isdigit((int) leftovers[0])) {
675d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "-%c second argument is non numeric.\n", c);
6766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
6776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
67877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->stop_lba = (OFF_T) strtoul(leftovers, &leftovers, 0);
6796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6806e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba <<= 10;
6816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6826e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba *= 1000;
6836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6846e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba <<= 20;
6856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6866e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba *= 1000000;
68777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
68877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->stop_lba <<= 30;
68977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
69077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->stop_lba *= 1000000000;
6916e112132382b6442b636ee39b02951d771408e8frobbiew					}
6926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else { /* only a single value given */
69377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 0);
6946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 10;
6966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000;
6986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 20;
7006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
7016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000000;
70277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
70377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_lba <<= 30;
70477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak					} else if(leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
70577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak						args->start_lba *= 1000000000;
7066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
7076e112132382b6442b636ee39b02951d771408e8frobbiew				}
7086e112132382b6442b636ee39b02951d771408e8frobbiew				break;
7096e112132382b6442b636ee39b02951d771408e8frobbiew			case '?' :
7106e112132382b6442b636ee39b02951d771408e8frobbiew			default  :
7116e112132382b6442b636ee39b02951d771408e8frobbiew				usage();
7126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				return(-1);
7136e112132382b6442b636ee39b02951d771408e8frobbiew		}
7146e112132382b6442b636ee39b02951d771408e8frobbiew	}
7156e112132382b6442b636ee39b02951d771408e8frobbiew	if(argv[optind] == NULL) {
716d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Unspecified target.\n");
7176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
7186e112132382b6442b636ee39b02951d771408e8frobbiew	}
719d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	strncpy(args->device, argv[optind], (DEV_NAME_LEN-1));
7206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	return(0);
7216e112132382b6442b636ee39b02951d771408e8frobbiew}
7226e112132382b6442b636ee39b02951d771408e8frobbiew
723d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridgeint make_assumptions(child_args_t *args)
7246e112132382b6442b636ee39b02951d771408e8frobbiew{
7256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char TmpStr[80];
72677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	struct stat stat_buf;
72777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	int rv;
7286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
7296e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_IOTYPS)) {
73077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* use stat to get file properties, and use to set -I */
73177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		rv = stat(args->device, &stat_buf);
73277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if(0 == rv) {
73377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			if(IS_FILE(stat_buf.st_mode) ) {
73477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
73577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_FILE;
73677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			} else if(IS_BLK(stat_buf.st_mode)) {
73777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				strncat(args->argstr, "(-I b) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
73877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_BLK;
7396b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS
74077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			} else if(S_ISCHR(stat_buf.st_mode)) {
74177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				strncat(args->argstr, "(-I r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
74277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak				args->flags |= CLD_FLG_RAW;
7436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
74477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			}
7456e112132382b6442b636ee39b02951d771408e8frobbiew		} else {
74677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			pMsg(WARN, args, "Can't get status on %s, defaulting to file, errno = %d\n", args->device, GETLASTERROR());
747d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
7486e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_FILE;
7496e112132382b6442b636ee39b02951d771408e8frobbiew		}
75077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
75177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_WFSYNC) && (0 == args->sync_interval)) {
75277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(INFO, args, "Sync interval set to zero, assuming interval of 1.\n");
75377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		args->sync_interval = 1;
7546e112132382b6442b636ee39b02951d771408e8frobbiew	}
7556e112132382b6442b636ee39b02951d771408e8frobbiew
7566e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->ltrsiz <= 0) {
7576b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-B %d) ", TRSIZ*BLK_SIZE);
758d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
7596e112132382b6442b636ee39b02951d771408e8frobbiew		args->ltrsiz=TRSIZ;
7606e112132382b6442b636ee39b02951d771408e8frobbiew		args->htrsiz=TRSIZ;
7616e112132382b6442b636ee39b02951d771408e8frobbiew	}
7626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->flags & CLD_FLG_LBA_RNG) {
7636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->start_blk = args->start_lba / args->htrsiz;
7646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(!(args->stop_lba < 0))
7656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->stop_blk = args->stop_lba / args->htrsiz;
7666b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7676e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->flags & CLD_FLG_BLK_RNG) {
7686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->start_lba = args->start_blk * args->htrsiz;
7696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(!(args->stop_blk < 0))
77077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->stop_lba = (args->stop_blk * args->htrsiz) + (args->htrsiz - 1);
7716e112132382b6442b636ee39b02951d771408e8frobbiew	}
77277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, try and get it from the file */
773d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	if((args->vsiz <=0) && (args->flags & CLD_FLG_FILE)) {
77477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if(0 != get_file_size(args->device)) { /* file size retrieved */
77577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->vsiz=get_file_size(args->device);
77677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
777d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	}
77877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, try and get it from the device */
77977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->vsiz <= 0) && !(args->flags & CLD_FLG_FILE)) {
7806e112132382b6442b636ee39b02951d771408e8frobbiew		args->vsiz=get_vsiz(args->device);
7816e112132382b6442b636ee39b02951d771408e8frobbiew	}
78277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, set based on given range */
78377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->vsiz <=0) && (args->flags & (CLD_FLG_LBA_RNG|CLD_FLG_BLK_RNG))) {
78477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if(!(args->stop_lba < 0))
78577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->vsiz=args->stop_lba+1;
78677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		else
78777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->vsiz=args->start_lba+1;
78877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
78977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* if vsiz is still not set, then set it to the default size */
7906e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->vsiz <= 0) {
7916e112132382b6442b636ee39b02951d771408e8frobbiew		args->vsiz=VSIZ;
7926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(!(args->flags & CLD_FLG_VSIZ)) {
79477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		sprintf(TmpStr, N_ASSUME, args->vsiz);
795d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
7966e112132382b6442b636ee39b02951d771408e8frobbiew	}
7976e112132382b6442b636ee39b02951d771408e8frobbiew
7986e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->stop_lba == -1) {
7996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->stop_lba=args->vsiz-1;
8006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
8016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->stop_blk == -1) {
80277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		args->stop_blk=(args->stop_lba / (OFF_T) args->htrsiz);
8036e112132382b6442b636ee39b02951d771408e8frobbiew	}
8046e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->t_kids == 0) {
8056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-K %d) ", KIDS);
806d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
8076e112132382b6442b636ee39b02951d771408e8frobbiew		args->t_kids=KIDS;
8086e112132382b6442b636ee39b02951d771408e8frobbiew	}
8096e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->flags & (CLD_FLG_W|CLD_FLG_R)) == 0) {
810d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		if(args->flags & CLD_FLG_DUTY) { /* no read/write but duty cycle specified */
811d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			if(args->rperc > 0) {
812d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_R;
813d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
814d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			}
815d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			if(args->wperc > 0) {
816d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_W;
817d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				strncat(args->argstr, "(-w) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
818d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			}
819d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		} else {
820d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
821d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			args->flags |= CLD_FLG_R;
822d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
8236e112132382b6442b636ee39b02951d771408e8frobbiew	}
8246e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_PTYPS)) {
825d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, "(-c) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
8266e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_CPTYPE;
8276e112132382b6442b636ee39b02951d771408e8frobbiew	}
8286e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_SKTYPS)) {
82977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		strncat(args->argstr, "(-p R) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
8306e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_RANDOM;
8316e112132382b6442b636ee39b02951d771408e8frobbiew	}
8326e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_SKS)) {
83377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if(args->start_blk == args->stop_blk) { /* diskcache test, w/ no seek count set */
8346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->seeks = SEEKS;
83577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		} else if(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG)) { /* range set, w/ no seek count */
83677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->seeks = args->stop_blk - args->start_blk + 1;
8376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		} else {
83877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			/* if vsiz is available, calculated seeks are in terms of the largest transfer size */
83977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			args->seeks = (args->vsiz > 0) ? (args->vsiz / args->htrsiz) : SEEKS;
8406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		}
8416e112132382b6442b636ee39b02951d771408e8frobbiew		if((args->flags & CLD_FLG_LINEAR) && (args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_W)) {
8426e112132382b6442b636ee39b02951d771408e8frobbiew			args->seeks *= 2;
8436e112132382b6442b636ee39b02951d771408e8frobbiew		}
844d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge
845d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		if(!(args->flags & CLD_FLG_TMD)) {
84677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			sprintf(TmpStr, L_ASSUME, args->seeks);
847d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
848d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
8496e112132382b6442b636ee39b02951d771408e8frobbiew	}
85077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(!(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)) || ((args->flags & CLD_FLG_CYC) && !(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)))) {
8516e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_SKS;
8526e112132382b6442b636ee39b02951d771408e8frobbiew	}
8536e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->flags & (CLD_FLG_LINEAR)) {
8546e112132382b6442b636ee39b02951d771408e8frobbiew		if(!(args->flags & (CLD_FLG_LUNU|CLD_FLG_LUND))) {
855d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-p u) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
8566e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_LUNU;
8576e112132382b6442b636ee39b02951d771408e8frobbiew		}
8586e112132382b6442b636ee39b02951d771408e8frobbiew	}
8596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	normalize_percs(args);
86077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(!(args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_RANDOM) && !(args->flags & CLD_FLG_NTRLVD)) {
86177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		sprintf(TmpStr, "(-D %d:%d) ", args->rperc, args->wperc);
862d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
8636e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_DUTY;
8646e112132382b6442b636ee39b02951d771408e8frobbiew	}
86577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->delayTimeMin == 0) && (args->delayTimeMax == 0) && (args->ioTimeout == DEFAULT_IO_TIMEOUT)) {
86677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		strncat(args->argstr, "(-t 0:2m) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
86777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
86877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(!(args->flags & CLD_FLG_OFFSET)) {
86977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		strncat(args->argstr, "(-o 0) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
87077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
8716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
8726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	return(0);
8736e112132382b6442b636ee39b02951d771408e8frobbiew}
8746e112132382b6442b636ee39b02951d771408e8frobbiew
8756e112132382b6442b636ee39b02951d771408e8frobbiew/*
8766e112132382b6442b636ee39b02951d771408e8frobbiew * checks validity of data after parsing
8776e112132382b6442b636ee39b02951d771408e8frobbiew * args and make assumtions. returns 0 on
8786e112132382b6442b636ee39b02951d771408e8frobbiew * success and -1 on failure.
8796e112132382b6442b636ee39b02951d771408e8frobbiew */
8806e112132382b6442b636ee39b02951d771408e8frobbiewint check_conclusions(child_args_t *args)
8816e112132382b6442b636ee39b02951d771408e8frobbiew{
88277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	extern unsigned long glb_flags;
88377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	struct stat stat_buf;
88477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	int rv;
88577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
88677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_DUTY) && ((args->flags & CLD_FLG_LINEAR) || (args->flags & CLD_FLG_NTRLVD))) {
88777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, "Duty cycle testing is supported for random (-pR) tests only.\n");
8886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
8906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_BLK_RNG) && (args->flags & CLD_FLG_RTRSIZ)) {
891d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Can't have unfixed block sizes and specify seek range in terms of blocks.\n");
8926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
8946e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->vsiz < 0) || (args->ltrsiz < 1) || (args->htrsiz < 1)) {
895d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Bounds exceeded for transfer size and/or volume size.\n");
89677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, MAXTRSIZ, (args->htrsiz*BLK_SIZE),args->vsiz);
89777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
89877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
89977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(args->htrsiz < args->ltrsiz) {
90077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Min transfer size, %lu, greater then Max transfer size, %lu.\n", args->ltrsiz, args->htrsiz);
9016e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9026e112132382b6442b636ee39b02951d771408e8frobbiew	}
9036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->vsiz < (args->stop_lba-args->start_lba+1)) {
904d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(ERR, args, "Volume stop block/lba exceeds volume size.\n");
9056e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9066e112132382b6442b636ee39b02951d771408e8frobbiew	}
9076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->vsiz < args->htrsiz) {
90877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, VSIZETS, args->vsiz, args->htrsiz);
9096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
9106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
9116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((!args->flags & CLD_FLG_TMD) && (args->seeks <= 0)) {
91277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN,args, TSEEK, args->seeks);
9136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
9146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
9156e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->flags & CLD_FLG_SKS) && (args->t_kids > args->seeks)) {
916d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Can't have more children then max number of seeks, use -K/-L to adjust.\n");
9176e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9186e112132382b6442b636ee39b02951d771408e8frobbiew	}
91977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->start_blk > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
92077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, STBGTTLBA, args->start_blk, (args->vsiz / args->htrsiz));
9216e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9226e112132382b6442b636ee39b02951d771408e8frobbiew	}
92377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->stop_blk > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
92477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, SBGTTLBA, args->stop_blk, (args->vsiz / args->htrsiz));
9256e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9266e112132382b6442b636ee39b02951d771408e8frobbiew	}
92777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->start_lba > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
92877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, STLBAGTLBA, args->start_lba, args->vsiz);
9296e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9306e112132382b6442b636ee39b02951d771408e8frobbiew	}
93177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->stop_lba > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
93277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, SLBAGTLBA, args->stop_lba, args->vsiz);
9336e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9346e112132382b6442b636ee39b02951d771408e8frobbiew	}
93577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(args->start_blk > args->stop_blk) {
93677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(WARN, args, SBRSB, args->stop_blk, args->start_blk);
9376e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9386e112132382b6442b636ee39b02951d771408e8frobbiew	}
93977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(args->start_lba > args->stop_lba) {
94077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, SLBARSLBA, args->stop_lba, args->start_lba);
9416e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9426e112132382b6442b636ee39b02951d771408e8frobbiew	}
94377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_LBA_RNG) && (args->flags & CLD_FLG_BLK_RNG)) {
94477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Can't specify range in both block and LBA, use -s or -S.\n");
9456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
9466b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
94777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
94877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	/* use stat to get file properties, and test then agains specified -I */
94977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	rv = stat(args->device, &stat_buf);
95077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(0 == rv) { /* no error on call to stat, compare against -I option */
95177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* files are usually file type */
95277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if((args->flags & CLD_FLG_FILE) && !IS_FILE(stat_buf.st_mode) ) {
95377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			pMsg(ERR, args, "Can't open non-file filespec with file device type, -If.\n");
95477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			return(-1);
95577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
95677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* block devices, are usually block type */
95777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if((args->flags & CLD_FLG_BLK) && !IS_BLK(stat_buf.st_mode)) {
95877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			pMsg(ERR, args, "Can't open non-block filespec with block device type, -Ib.\n");
95977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			return(-1);
96077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
96177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifndef WINDOWS
96277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		/* raw devices, are usually character type */
96377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if((args->flags & CLD_FLG_RAW) && !S_ISCHR(stat_buf.st_mode)) {
96477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			pMsg(ERR, args, "Can't open non-raw filespec with raw device type, -Ir.\n");
96577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			return(-1);
96677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
96777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#else
96877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		if(args->flags & CLD_FLG_RAW) {
96977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			pMsg(ERR, args, "RAW IO type not supported in Windows, use direct IO instead.\n");
97077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak			return(-1);
97177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		}
97277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#endif
97377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak#ifdef _DEBUG
97477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	} else {
97577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		PDBG1(DBUG, args, "Can't get status on %s, assuming a new file, errno = %d\n", args->device, GETLASTERROR());
9766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
97777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
97877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak
9796e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->hbeat > 0) && (args->flags & CLD_FLG_TMD) && (args->hbeat > args->run_time)) {
98077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Heartbeat should be at least equal to runtime, use -h/-T to adjust.\n");
9816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
9826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
9836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->hbeat > 0) && !(args->flags & CLD_FLG_PRFTYPS)) {
98477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "At least one performance option, -P, must be specified when using -h.\n");
9856e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9866e112132382b6442b636ee39b02951d771408e8frobbiew	}
987d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	if((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_CMPR)) {
98877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Write only, ignoring option -E.\n");
98977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
99077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_TMD) && (args->flags & CLD_FLG_SKS)) {
99177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Can't specify both -L and -T they are mutually exclusive.\n");
99277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
99377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
99477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(((args->flags & CLD_FLG_R) && !(args->flags & CLD_FLG_W)) && (args->flags & CLD_FLG_ERR_MARK)) {
99577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Can't specify mark on error, -Am, in read only mode.\n");
99677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
99777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
99877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if(!(args->flags & CLD_FLG_ALLDIE) && (args->flags & CLD_FLG_ERR_MARK)) {
99977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Can't specify mark on error, -Am, when continue on error is set.\n");
100077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
100177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
100277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((glb_flags & GLB_FLG_KILL) && !(args->flags & CLD_FLG_ALLDIE)) {
100377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Can't specify global kill, -Ag, when continue on error is set, -Ac.\n");
100477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
100577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
100677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_LINEAR) && !(args->flags & CLD_FLG_NTRLVD) && (args->flags & CLD_FLG_TMD)) {
100777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Linear read / write test can not be timed.\n");
100877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
100977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
101077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_CMPR) && (args->cmp_lng > (args->ltrsiz*BLK_SIZE))) {
101177e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, "Compare length, %lu, is greater then transfer size, %lu\n", args->cmp_lng, args->ltrsiz*BLK_SIZE);
101277e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
101377e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
101477e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_OFFSET) && (args->offset > args->stop_lba)) {
101577e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, LBAOFFGSLBA, args->offset, args->stop_lba);
101677e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
101777e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	}
101877e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak	if((args->flags & CLD_FLG_OFFSET) && ((args->offset+args->ltrsiz-1) > args->stop_lba)) {
101977e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		pMsg(ERR, args, LBAOTSGSLBA, args->offset, args->ltrsiz, args->stop_lba);
102077e42cafa8942eba6e7706c9d9c25a04ec7cdda5subrata_modak		return(-1);
1021d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	}
10226e112132382b6442b636ee39b02951d771408e8frobbiew	return(0);
10236e112132382b6442b636ee39b02951d771408e8frobbiew}
1024