parse.c revision d18ffdd88be3c62d027fd49a115bc9c4fe4b910c
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*
25d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* $Id: parse.c,v 1.5 2005/05/04 17:54:00 mridge Exp $
266e112132382b6442b636ee39b02951d771408e8frobbiew* $Log: parse.c,v $
27d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.5  2005/05/04 17:54:00  mridge
28d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Update to version 1.2.8
29d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge*
30d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.18  2005/04/28 21:25:18  yardleyb
31d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Fixed up some issues with AIX compilation due to the change made
32d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* in endian support in Linux.
33d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge*
34d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.17  2005/01/08 21:18:34  yardleyb
35d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Update performance output and usage.  Fixed pass count check
36d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge*
37d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.16  2004/12/18 06:13:03  yardleyb
38d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Updated timer schema to more accurately use the time options.  Added
39d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* fsync on write option to -If.
40d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge*
41d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.15  2004/11/20 05:05:58  yardleyb
42d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* added more command line checking
43d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge*
44d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.14  2004/11/20 04:43:42  yardleyb
45d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Minor code fixes.  Checking for alloc errors.
46d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge*
47d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Revision 1.13  2004/11/02 20:47:13  yardleyb
48d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* Added -F functions.
49d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge* lots of minor fixes. see README
503c4780d44b6598841455e234e6f152fbf36a397drobbiew*
5163f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Revision 1.12  2003/09/12 21:47:22  yardleyb
5263f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Removed a debug message
5363f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew*
5463f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Revision 1.11  2003/09/12 18:10:09  yardleyb
5563f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Updated to version 1.11
5663f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Code added to fix compile
5763f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* time warnings
5863f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew*
5963f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Revision 1.10  2003/04/08 17:21:19  yardleyb
6063f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew* Added get volume size code for any AIX volume type
616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.9  2002/05/31 18:47:59  yardleyb
636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Updates to -pl -pL options.
646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Fixed test status to fail on
656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* failure to open filespec.
666b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Version set to 1.1.9
676b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.8  2002/04/24 01:45:31  yardleyb
696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Minor Fixes:
706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Read/write time could exceeds overall time
716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Heartbeat options sometimes only displayed once
726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Cleanup time for large number of threads was very long (windows)
736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* If heartbeat specified, now checks for performance option also
746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* No IO was performed when -S0:0 and -pr specified
756b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.7  2002/03/30 01:32:14  yardleyb
776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Major Changes:
786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Added Dumping routines for
806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* data miscompares,
816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Updated performance output
836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* based on command line.  Gave
846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* one decimal in MB/s output.
856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Rewrote -pL IO routine to show
876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* correct stats.  Now show pass count
886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* when using -C.
896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Minor Changes:
916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Code cleanup to remove the plethera
936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* if #ifdef for windows/unix functional
946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* differences.
956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.6  2002/03/07 03:38:52  yardleyb
976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Added dump function from command
986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* line.  Created formatted dump output
996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* for Data miscomare and command line.
1006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Can now leave off filespec the full
1016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* path header as it will be added based
1026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* on -I.
1036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew*
1046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Revision 1.5  2002/02/26 19:35:59  yardleyb
1056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* Updates to parsing routines for user
1066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* input.  Added multipliers for -S and
1076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* -s command line arguments. Forced
1086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* default seeks to default if performing
1096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew* a diskcache test.
1106e112132382b6442b636ee39b02951d771408e8frobbiew*
1116e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.4  2002/02/19 02:46:37  yardleyb
1126e112132382b6442b636ee39b02951d771408e8frobbiew* Added changes to compile for AIX.
1136e112132382b6442b636ee39b02951d771408e8frobbiew* Update getvsiz so it returns a -1
1146e112132382b6442b636ee39b02951d771408e8frobbiew* if the ioctl fails and we handle
1156e112132382b6442b636ee39b02951d771408e8frobbiew* that fact correctly.  Added check
1166e112132382b6442b636ee39b02951d771408e8frobbiew* to force vsiz to always be greater
1176e112132382b6442b636ee39b02951d771408e8frobbiew* then stop_lba.
1186e112132382b6442b636ee39b02951d771408e8frobbiew*
1196e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.3  2002/02/04 20:35:38  yardleyb
1206e112132382b6442b636ee39b02951d771408e8frobbiew* Changed max. number of threads to 64k.
1216e112132382b6442b636ee39b02951d771408e8frobbiew* Check for max threads in parsing.
1226e112132382b6442b636ee39b02951d771408e8frobbiew* Fixed windows getopt to return correctly
1236e112132382b6442b636ee39b02951d771408e8frobbiew* when a bad option is given.
1246e112132382b6442b636ee39b02951d771408e8frobbiew* Update time output to be in the format:
1256e112132382b6442b636ee39b02951d771408e8frobbiew*   YEAR/MONTH/DAY-HOUR:MIN:SEC
1266e112132382b6442b636ee39b02951d771408e8frobbiew* instead of epoch time.
1276e112132382b6442b636ee39b02951d771408e8frobbiew*
1286e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.2  2001/12/04 19:25:47  yardleyb
1296e112132382b6442b636ee39b02951d771408e8frobbiew* Finished removeal of -t option
1306e112132382b6442b636ee39b02951d771408e8frobbiew*
1316e112132382b6442b636ee39b02951d771408e8frobbiew* Revision 1.1  2001/12/04 18:51:06  yardleyb
1326e112132382b6442b636ee39b02951d771408e8frobbiew* Checkin of new source files and removal
1336e112132382b6442b636ee39b02951d771408e8frobbiew* of outdated source
1346e112132382b6442b636ee39b02951d771408e8frobbiew*
1356e112132382b6442b636ee39b02951d771408e8frobbiew*/
1366e112132382b6442b636ee39b02951d771408e8frobbiew#include <sys/types.h>
1376e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdio.h>
1386e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdlib.h>
1396e112132382b6442b636ee39b02951d771408e8frobbiew#include <stdarg.h>
1406e112132382b6442b636ee39b02951d771408e8frobbiew#include <signal.h>
1416e112132382b6442b636ee39b02951d771408e8frobbiew#include <time.h>
1426e112132382b6442b636ee39b02951d771408e8frobbiew#include <errno.h>
1436e112132382b6442b636ee39b02951d771408e8frobbiew#include <fcntl.h>
1446e112132382b6442b636ee39b02951d771408e8frobbiew#include <string.h>
1456e112132382b6442b636ee39b02951d771408e8frobbiew#include <ctype.h>
1466e112132382b6442b636ee39b02951d771408e8frobbiew
1476e112132382b6442b636ee39b02951d771408e8frobbiew#include "globals.h"
1486e112132382b6442b636ee39b02951d771408e8frobbiew#include "threading.h"
1496e112132382b6442b636ee39b02951d771408e8frobbiew#include "main.h"
1506e112132382b6442b636ee39b02951d771408e8frobbiew#include "usage.h"
1516e112132382b6442b636ee39b02951d771408e8frobbiew#include "sfunc.h"
1526e112132382b6442b636ee39b02951d771408e8frobbiew#include "parse.h"
1536e112132382b6442b636ee39b02951d771408e8frobbiew
1546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiewint fill_cld_args(int argc, char **argv, child_args_t *args)
1556e112132382b6442b636ee39b02951d771408e8frobbiew{
1566e112132382b6442b636ee39b02951d771408e8frobbiew	extern char *optarg;
1576e112132382b6442b636ee39b02951d771408e8frobbiew	extern int optind;
1586e112132382b6442b636ee39b02951d771408e8frobbiew	extern unsigned long glb_flags;
1596b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
1606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	signed char c;
1616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char *leftovers;
1626e112132382b6442b636ee39b02951d771408e8frobbiew
163d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	while((c = getopt(argc, argv, "?a:AB:cC:dD:E:f:Fh:I:K:L:m:nN:op:P:qQrs:S:t:T:wvV:z")) != -1) {
1646e112132382b6442b636ee39b02951d771408e8frobbiew		switch(c) {
1656e112132382b6442b636ee39b02951d771408e8frobbiew			case ':' :
166d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				pMsg(WARN, args, "Missing argument for perameter.\n");
1676e112132382b6442b636ee39b02951d771408e8frobbiew				usage();
1686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				return(-1);
1696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'V' :
1706e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
171d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
1726e112132382b6442b636ee39b02951d771408e8frobbiew					exit(1);
1736e112132382b6442b636ee39b02951d771408e8frobbiew				}
1746e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
175d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c argument is non numeric.\n", c);
1766e112132382b6442b636ee39b02951d771408e8frobbiew					exit(1);
1776e112132382b6442b636ee39b02951d771408e8frobbiew				}
1786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				gbl_dbg_lvl = atoi(optarg);
1796e112132382b6442b636ee39b02951d771408e8frobbiew				break;
1806e112132382b6442b636ee39b02951d771408e8frobbiew			case 'd' :
1816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				glb_flags |= GLB_FLG_QUIET;
1826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->flags |= CLD_FLG_DUMP;
1836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				break;
1846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'a' :
1856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(optarg == NULL) {
186d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
1876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
1886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
1896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(!isdigit(optarg[0])) {
190d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
1916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
1926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
1936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->seed = (unsigned int) atoi(optarg);
1946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				break;
1956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'A' :
1966e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags &= ~CLD_FLG_ALLDIE;
1976e112132382b6442b636ee39b02951d771408e8frobbiew				break;
1986e112132382b6442b636ee39b02951d771408e8frobbiew			case 'q' :
1996e112132382b6442b636ee39b02951d771408e8frobbiew				glb_flags |= GLB_FLG_QUIET;
2006e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			case 'Q' :
2026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				glb_flags |= GLB_FLG_SUPRESS;
2036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				break;
2046e112132382b6442b636ee39b02951d771408e8frobbiew			case 'v' :
205d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				pMsg(INFO, args, "Version %s\n", VER_STR);
2066e112132382b6442b636ee39b02951d771408e8frobbiew				exit(0);
2076e112132382b6442b636ee39b02951d771408e8frobbiew			case 'p' :
2086e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
209d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
2106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
2126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(args->flags & (CLD_FLG_LINEAR|CLD_FLG_RANDOM)) {
213d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Only one seek type, -p, can be specified.\n");
2146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2156e112132382b6442b636ee39b02951d771408e8frobbiew				}
2166e112132382b6442b636ee39b02951d771408e8frobbiew				/* seek pattern type */
2176e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'L'))
2186e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_LINEAR;
2196e112132382b6442b636ee39b02951d771408e8frobbiew				else if (strchr(optarg,'l'))
2206e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= (CLD_FLG_LINEAR|CLD_FLG_NTRLVD);
2216e112132382b6442b636ee39b02951d771408e8frobbiew				else if (strchr(optarg,'R') || strchr(optarg,'r'))
2226e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_RANDOM;
2236e112132382b6442b636ee39b02951d771408e8frobbiew				else {
224d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Unknown Seek pattern\n");
2256e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2276e112132382b6442b636ee39b02951d771408e8frobbiew				}
2286e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'U') || strchr(optarg,'u'))
2296e112132382b6442b636ee39b02951d771408e8frobbiew					if((args->flags & (CLD_FLG_LINEAR)) &&
2306e112132382b6442b636ee39b02951d771408e8frobbiew							!(args->flags & CLD_FLG_LUND))
2316e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_LUNU;
2326e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'D') || strchr(optarg,'d'))
2336e112132382b6442b636ee39b02951d771408e8frobbiew					if((args->flags & (CLD_FLG_LINEAR)) &&
2346e112132382b6442b636ee39b02951d771408e8frobbiew							!(args->flags & CLD_FLG_LUNU))
2356e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_LUND;
2366e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2376e112132382b6442b636ee39b02951d771408e8frobbiew			case 'B' :
2386e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
239d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
2406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2416e112132382b6442b636ee39b02951d771408e8frobbiew				}
2426e112132382b6442b636ee39b02951d771408e8frobbiew				if(strchr(optarg,':') != NULL) { /* we are given a range of transfer sizes */
2436e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_RTRSIZ;
2446e112132382b6442b636ee39b02951d771408e8frobbiew					args->ltrsiz = strtoul(optarg, &leftovers, 10);
2456e112132382b6442b636ee39b02951d771408e8frobbiew					if(leftovers == strchr(leftovers,'k')) { /* first value had a 'k' */
2466e112132382b6442b636ee39b02951d771408e8frobbiew						args->ltrsiz *= 2;
2476e112132382b6442b636ee39b02951d771408e8frobbiew						leftovers++;
2486e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
2496e112132382b6442b636ee39b02951d771408e8frobbiew						if (args->ltrsiz > 256)
2506b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew							args->ltrsiz /= BLK_SIZE;
2516e112132382b6442b636ee39b02951d771408e8frobbiew					}
2526e112132382b6442b636ee39b02951d771408e8frobbiew					if(!isdigit(leftovers[1])) {
253d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
2546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
2556e112132382b6442b636ee39b02951d771408e8frobbiew					}
2566e112132382b6442b636ee39b02951d771408e8frobbiew					args->htrsiz = atol((char *)strchr(leftovers,':')+1);
2576e112132382b6442b636ee39b02951d771408e8frobbiew					if((strchr(leftovers,'k')) != NULL) {/* second value had a 'k' */
2586e112132382b6442b636ee39b02951d771408e8frobbiew						args->htrsiz *= 2;
2596e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
2606e112132382b6442b636ee39b02951d771408e8frobbiew						if (args->htrsiz > 256)
2616e112132382b6442b636ee39b02951d771408e8frobbiew							   args->htrsiz /= BLK_SIZE;
2626e112132382b6442b636ee39b02951d771408e8frobbiew					}
2636e112132382b6442b636ee39b02951d771408e8frobbiew				} else { /* only a single value given for transfer size */
2646e112132382b6442b636ee39b02951d771408e8frobbiew					if(strchr(optarg,'k')) {
2656e112132382b6442b636ee39b02951d771408e8frobbiew						args->ltrsiz = atoi(optarg);
2666e112132382b6442b636ee39b02951d771408e8frobbiew						args->ltrsiz *= 2;
2676e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
2686e112132382b6442b636ee39b02951d771408e8frobbiew						args->ltrsiz = atoi(optarg);
2696e112132382b6442b636ee39b02951d771408e8frobbiew						if (args->ltrsiz > 256)
2706e112132382b6442b636ee39b02951d771408e8frobbiew							   args->ltrsiz /= BLK_SIZE;
2716e112132382b6442b636ee39b02951d771408e8frobbiew					}
2726e112132382b6442b636ee39b02951d771408e8frobbiew					args->htrsiz = args->ltrsiz;
2736e112132382b6442b636ee39b02951d771408e8frobbiew				}
274d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				PDBG5(DEBUG, args, "Parsed Transfer size: %ld\n", args->htrsiz);
2756e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2766e112132382b6442b636ee39b02951d771408e8frobbiew			case 'c' :
2776e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
278d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2796e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2816e112132382b6442b636ee39b02951d771408e8frobbiew				}
2826e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_CPTYPE;
2836e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2846e112132382b6442b636ee39b02951d771408e8frobbiew			case 'n' :
2856e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
286d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2876e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
2886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2896e112132382b6442b636ee39b02951d771408e8frobbiew				}
2906e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_LPTYPE;
2916e112132382b6442b636ee39b02951d771408e8frobbiew				break;
2926e112132382b6442b636ee39b02951d771408e8frobbiew			case 'f' :
2936e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
294d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
2956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
2966e112132382b6442b636ee39b02951d771408e8frobbiew				}
2976e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
298d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
2996e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
3006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3016e112132382b6442b636ee39b02951d771408e8frobbiew				}
3026e112132382b6442b636ee39b02951d771408e8frobbiew				args->pattern = my_strtofft(optarg);
3036e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_FPTYPE;
3046e112132382b6442b636ee39b02951d771408e8frobbiew				break;
305d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			case 'F' :
306d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				/* the filespec is a list of filespecs in a file */
307d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_FSLIST;
308d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				break;
3096e112132382b6442b636ee39b02951d771408e8frobbiew			case 'z' :
3106e112132382b6442b636ee39b02951d771408e8frobbiew				if(args->flags & CLD_FLG_PTYPS) {
311d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Please specify only one pattern type\n");
3126e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
3136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3146e112132382b6442b636ee39b02951d771408e8frobbiew				}
3156e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_RPTYPE;
3166e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3176e112132382b6442b636ee39b02951d771408e8frobbiew			case 'h' :
3186e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
319d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3216e112132382b6442b636ee39b02951d771408e8frobbiew				}
3226e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
323d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
3246e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
3256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3266e112132382b6442b636ee39b02951d771408e8frobbiew				}
327d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_HBEAT;
3286e112132382b6442b636ee39b02951d771408e8frobbiew				args->hbeat = atoi(optarg);
3296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,'m')) {	/* multiply by sec */
3306b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->hbeat *= 60;
3316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'h')) { /* multiply sec*min */
3326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->hbeat *= (time_t) (60*60);
3336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'d')) { /* multiply by sec*min*hours */
3346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->hbeat *= (time_t) (60*60*24);
3356b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
3366e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3376e112132382b6442b636ee39b02951d771408e8frobbiew			case 'D' :
3386e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
339d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3416e112132382b6442b636ee39b02951d771408e8frobbiew				}
3426e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
343d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
3446e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
3456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3466e112132382b6442b636ee39b02951d771408e8frobbiew				}
3476e112132382b6442b636ee39b02951d771408e8frobbiew				args->rperc = atoi(optarg);
3486e112132382b6442b636ee39b02951d771408e8frobbiew				args->wperc = atoi((char *)(strchr(optarg,':')+1));
3496e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_DUTY;
3506e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3516e112132382b6442b636ee39b02951d771408e8frobbiew			case 'r' :
3526e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_R;
3536e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3546e112132382b6442b636ee39b02951d771408e8frobbiew			case 'w' :
3556e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_W;
3566e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3576e112132382b6442b636ee39b02951d771408e8frobbiew			case 'o' : { args->flags |= CLD_FLG_SQNCE; break; }
3586e112132382b6442b636ee39b02951d771408e8frobbiew			case 't' :
3596e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
360d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3626e112132382b6442b636ee39b02951d771408e8frobbiew				}
3636e112132382b6442b636ee39b02951d771408e8frobbiew				args->retries = atoi(optarg);
364d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				pMsg(ERR, args, "-%c not implemented...\n", c);
3656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				return(-1);
3666e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3676e112132382b6442b636ee39b02951d771408e8frobbiew			case 'm' :
3686e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
369d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3716e112132382b6442b636ee39b02951d771408e8frobbiew				}
3726e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'L') || strchr(optarg,'l'))
3736e112132382b6442b636ee39b02951d771408e8frobbiew					args->mrk_flag |= MARK_LAST;
3746e112132382b6442b636ee39b02951d771408e8frobbiew				else if (strchr(optarg,'F') || strchr(optarg,'f'))
3756e112132382b6442b636ee39b02951d771408e8frobbiew					args->mrk_flag |= MARK_FIRST;
3766e112132382b6442b636ee39b02951d771408e8frobbiew				else if (strchr(optarg,'A') || strchr(optarg,'a'))
3776e112132382b6442b636ee39b02951d771408e8frobbiew					args->mrk_flag |= MARK_ALL;
3786e112132382b6442b636ee39b02951d771408e8frobbiew				else {
379d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Unknown mark type.\n");
3806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3816e112132382b6442b636ee39b02951d771408e8frobbiew				}
3826e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_MBLK;
3836e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3846e112132382b6442b636ee39b02951d771408e8frobbiew			case 'E' :
3856e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
386d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
3876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3886e112132382b6442b636ee39b02951d771408e8frobbiew				}
3896e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
390d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments are non numeric.\n", c);
3916e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
3926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
3936e112132382b6442b636ee39b02951d771408e8frobbiew				}
3946e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_CMPR;
3956e112132382b6442b636ee39b02951d771408e8frobbiew				args->cmp_lng = strtol(optarg,NULL,0);
3966e112132382b6442b636ee39b02951d771408e8frobbiew				break;
3976e112132382b6442b636ee39b02951d771408e8frobbiew			case 'N' :
3986e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
399d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
4006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4016e112132382b6442b636ee39b02951d771408e8frobbiew				}
4026e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
403d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments are non numeric.\n", c);
4046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4056e112132382b6442b636ee39b02951d771408e8frobbiew				}
4066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->flags |= CLD_FLG_VSIZ;
4076e112132382b6442b636ee39b02951d771408e8frobbiew				args->vsiz = my_strtofft(optarg);
4086e112132382b6442b636ee39b02951d771408e8frobbiew				if(strchr(optarg,'k')) {	/* multiply by 2^10 */
4096e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz <<= 10;
4106e112132382b6442b636ee39b02951d771408e8frobbiew				} else if(strchr(optarg,'K')) { /* multiply 10^3 */
4116e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz *= 1000;
4126e112132382b6442b636ee39b02951d771408e8frobbiew				} else if(strchr(optarg,'m')) { /* multiply by 2^20 */
4136e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz <<= 20;
4146e112132382b6442b636ee39b02951d771408e8frobbiew				} else if(strchr(optarg,'M')) { /* multiply by 10^6 */
4156e112132382b6442b636ee39b02951d771408e8frobbiew					args->vsiz *= 1000000;
4166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'g')) { /* multiply by 2^30 */
4176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->vsiz <<= 30;
4186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'G')) { /* multiply by 10^9 */
4196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->vsiz *= 1000000000;
4206e112132382b6442b636ee39b02951d771408e8frobbiew				}
4216e112132382b6442b636ee39b02951d771408e8frobbiew				break;
4226e112132382b6442b636ee39b02951d771408e8frobbiew			case 'I' :
4236e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
424d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
4256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4266e112132382b6442b636ee39b02951d771408e8frobbiew				}
4276e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'R') || strchr(optarg,'r')) {
4286e112132382b6442b636ee39b02951d771408e8frobbiew					if (!(args->flags & CLD_FLG_BLK) &&
4296e112132382b6442b636ee39b02951d771408e8frobbiew					    !(args->flags & CLD_FLG_FILE)) {
4306e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_RAW;
4316e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
432d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify one IO type\n");
4336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
4346e112132382b6442b636ee39b02951d771408e8frobbiew					}
4356e112132382b6442b636ee39b02951d771408e8frobbiew				}
4366e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'B') || strchr(optarg,'b')) {
4376e112132382b6442b636ee39b02951d771408e8frobbiew					if (!(args->flags & CLD_FLG_RAW) &&
4386e112132382b6442b636ee39b02951d771408e8frobbiew					    !(args->flags & CLD_FLG_FILE)) {
4396e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_BLK;
4406e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
441d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify one IO type\n");
4426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
4436e112132382b6442b636ee39b02951d771408e8frobbiew					}
4446e112132382b6442b636ee39b02951d771408e8frobbiew				}
4456e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'F') || strchr(optarg,'f')) {
4466e112132382b6442b636ee39b02951d771408e8frobbiew					if (!(args->flags & CLD_FLG_RAW) &&
4476e112132382b6442b636ee39b02951d771408e8frobbiew					    !(args->flags & CLD_FLG_BLK)) {
4486e112132382b6442b636ee39b02951d771408e8frobbiew						args->flags |= CLD_FLG_FILE;
4496e112132382b6442b636ee39b02951d771408e8frobbiew					} else {
450d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify one IO type\n");
4516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
4526e112132382b6442b636ee39b02951d771408e8frobbiew					}
4536e112132382b6442b636ee39b02951d771408e8frobbiew				}
454d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				if (strchr(optarg,'D') || strchr(optarg,'d')) {
4556e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_DIRECT;
456d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
457d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				if (strchr(optarg,'S') || strchr(optarg,'s')) {
458d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					if(!(args->flags & CLD_FLG_FILE)) {
459d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "Can only specify fsync with file IO\n");
460d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						return(-1);
461d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					}
462d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					args->flags |= CLD_FLG_WFSYNC;
463d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
4646e112132382b6442b636ee39b02951d771408e8frobbiew				break;
4656e112132382b6442b636ee39b02951d771408e8frobbiew			case 'T' :
4666e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
467d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
4686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4696e112132382b6442b636ee39b02951d771408e8frobbiew				}
4706e112132382b6442b636ee39b02951d771408e8frobbiew				args->run_time = atoi(optarg);
4716e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_TMD;
4726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,'m')) {	/* multiply by sec */
4736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->run_time *= 60;
4746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'h')) { /* multiply sec*min */
4756b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->run_time *= (time_t) (60*60);
4766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'d')) { /* multiply by sec*min*hours */
4776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->run_time *= (time_t) (60*60*24);
4786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
4796e112132382b6442b636ee39b02951d771408e8frobbiew				break;
4806e112132382b6442b636ee39b02951d771408e8frobbiew			case 'L' :
4816e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
482d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
4836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
4846e112132382b6442b636ee39b02951d771408e8frobbiew				}
4856e112132382b6442b636ee39b02951d771408e8frobbiew				args->seeks = atoi(optarg);
4866e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_SKS;
4876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,'k')) {	/* multiply by 2^10 */
4886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks <<= 10;
4896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'K')) { /* multiply 10^3 */
4906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks *= 1000;
4916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'m')) { /* multiply by 2^20 */
4926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks <<= 20;
4936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'M')) { /* multiply by 10^6 */
4946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks *= 1000000;
4956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'g')) { /* multiply by 2^30 */
4966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks <<= 30;
4976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else if(strchr(optarg,'G')) { /* multiply by 10^9 */
4986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->seeks *= 1000000000;
4996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
5006e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5016e112132382b6442b636ee39b02951d771408e8frobbiew			case 'C' :
5026e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
503d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5056e112132382b6442b636ee39b02951d771408e8frobbiew				}
5066e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
507d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5086e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
5096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5106e112132382b6442b636ee39b02951d771408e8frobbiew				}
5116e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_CYC;
5126e112132382b6442b636ee39b02951d771408e8frobbiew				args->cycles = atol(optarg);
5136e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5146e112132382b6442b636ee39b02951d771408e8frobbiew			case 'K' :
5156e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
516d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5186e112132382b6442b636ee39b02951d771408e8frobbiew				}
5196e112132382b6442b636ee39b02951d771408e8frobbiew				if(!isdigit(optarg[0])) {
520d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5216e112132382b6442b636ee39b02951d771408e8frobbiew					usage();
5226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5236e112132382b6442b636ee39b02951d771408e8frobbiew				}
5246e112132382b6442b636ee39b02951d771408e8frobbiew				if(atoi(optarg) > MAX_THREADS) {
525d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "%u exceeds max of %u threads.\n", atoi(optarg), MAX_THREADS);
5266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5276e112132382b6442b636ee39b02951d771408e8frobbiew				}
5286e112132382b6442b636ee39b02951d771408e8frobbiew				args->t_kids = atoi(optarg);
5296e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5306e112132382b6442b636ee39b02951d771408e8frobbiew			case 'P' :
5316e112132382b6442b636ee39b02951d771408e8frobbiew				if(optarg == NULL) {
532d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c option requires an argument.\n", c);
5336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5346e112132382b6442b636ee39b02951d771408e8frobbiew				}
5356e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'X')) { /* returns NULL if char is not found */
5366e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_XFERS;
5376e112132382b6442b636ee39b02951d771408e8frobbiew				}
5386e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'T')) {
5396e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_TPUTS;
5406e112132382b6442b636ee39b02951d771408e8frobbiew				}
5416e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'P')) {
5426e112132382b6442b636ee39b02951d771408e8frobbiew					glb_flags |= GLB_FLG_PERFP;
5436e112132382b6442b636ee39b02951d771408e8frobbiew				}
5446e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'R')) {
5456e112132382b6442b636ee39b02951d771408e8frobbiew					args->flags |= CLD_FLG_RUNT;
5466e112132382b6442b636ee39b02951d771408e8frobbiew				}
547d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				if (strchr(optarg,'C')) {
548d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					args->flags |= CLD_FLG_PCYC;
549d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				}
5506e112132382b6442b636ee39b02951d771408e8frobbiew				if (strchr(optarg,'A')) {
551d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					args->flags |= CLD_FLG_PRFTYPS;
5526e112132382b6442b636ee39b02951d771408e8frobbiew				}
5536e112132382b6442b636ee39b02951d771408e8frobbiew				if (!strchr(optarg,'P') &&
5546e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'A') &&
5556e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'X') &&
5566e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'R') &&
557d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						!strchr(optarg,'C') &&
5586e112132382b6442b636ee39b02951d771408e8frobbiew						!strchr(optarg,'T')) {
559d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "Unknown performance option\n");
5606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5616e112132382b6442b636ee39b02951d771408e8frobbiew				}
5626e112132382b6442b636ee39b02951d771408e8frobbiew				break;
5636e112132382b6442b636ee39b02951d771408e8frobbiew			case 'S' :
5646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(!isdigit((int)optarg[0])) {
565d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5666b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
5676e112132382b6442b636ee39b02951d771408e8frobbiew				}
5686e112132382b6442b636ee39b02951d771408e8frobbiew				args->flags |= CLD_FLG_BLK_RNG;
5696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,':') != NULL) { /* we are given a range */
5706b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 10);
5716b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
5726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 10;
5736b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
5746b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
5756b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000;
5766b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
5776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
5786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 20;
5796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
5806b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
5816b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000000;
5826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
5836b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
5846b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					leftovers++;  /* should be at the next value */
5856b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(!isdigit((int) leftovers[0])) {
586d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
5876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
5886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
5896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->stop_blk = (OFF_T) strtoul(leftovers, &leftovers, 10);
5906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
5916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk <<= 10;
5926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
5936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk *= 1000;
5946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
5956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk <<= 20;
5966b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
5976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->stop_blk *= 1000000;
5986b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
5996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else { /* only a single value given */
6006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 10);
6016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 10;
6036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000;
6056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6066b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk <<= 20;
6076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_blk *= 1000000;
6096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
6116e112132382b6442b636ee39b02951d771408e8frobbiew				break;
6126e112132382b6442b636ee39b02951d771408e8frobbiew			case 's' :
6136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(!isdigit((int)optarg[0])) {
614d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge					pMsg(WARN, args, "-%c argument is non numeric.\n", c);
6156b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					return(-1);
6166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				}
6176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				args->flags |= CLD_FLG_LBA_RNG;
6186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				if(strchr(optarg,':') != NULL) { /* we are given a range */
6196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 10);
6206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 10;
6226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6246b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000;
6256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6276b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 20;
6286b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6296b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6306b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000000;
6316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						leftovers++;  /* at the ':' */
6326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					leftovers++;  /* should be at the next value */
6346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(!isdigit((int) leftovers[0])) {
635d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge						pMsg(WARN, args, "-%c second argument is non numeric.\n", c);
6366b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						return(-1);
6376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->stop_lba = (OFF_T) strtoul(leftovers, &leftovers, 10);
6396b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6406e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba <<= 10;
6416b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6426e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba *= 1000;
6436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6446e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba <<= 20;
6456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6466e112132382b6442b636ee39b02951d771408e8frobbiew						args->stop_lba *= 1000000;
6476e112132382b6442b636ee39b02951d771408e8frobbiew					}
6486b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				} else { /* only a single value given */
6496b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 10);
6506b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					if(leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
6516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 10;
6526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
6536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000;
6546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
6556b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba <<= 20;
6566b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					} else if(leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
6576b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew						args->start_lba *= 1000000;
6586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew					}
6596e112132382b6442b636ee39b02951d771408e8frobbiew				}
6606e112132382b6442b636ee39b02951d771408e8frobbiew				break;
6616e112132382b6442b636ee39b02951d771408e8frobbiew			case '?' :
6626e112132382b6442b636ee39b02951d771408e8frobbiew			default  :
6636e112132382b6442b636ee39b02951d771408e8frobbiew				usage();
6646b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew				return(-1);
6656e112132382b6442b636ee39b02951d771408e8frobbiew		}
6666e112132382b6442b636ee39b02951d771408e8frobbiew	}
6676e112132382b6442b636ee39b02951d771408e8frobbiew	if(argv[optind] == NULL) {
668d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Unspecified target.\n");
6696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
6706e112132382b6442b636ee39b02951d771408e8frobbiew	}
671d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	strncpy(args->device, argv[optind], (DEV_NAME_LEN-1));
6726b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	return(0);
6736e112132382b6442b636ee39b02951d771408e8frobbiew}
6746e112132382b6442b636ee39b02951d771408e8frobbiew
675d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridgeint make_assumptions(child_args_t *args)
6766e112132382b6442b636ee39b02951d771408e8frobbiew{
6776b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char TmpStr[80];
6786b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	char *device;
6796b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
6806e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_IOTYPS)) {
681d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		if((device = (char *) ALLOC(strlen(args->device)+1)) == NULL) {
682d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			pMsg(ERR, args, "%d : Could not create device string map.\n");
683d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			return 1;
684d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
685d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge
6866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		memset(device, 0, strlen(args->device)+1);
6876e112132382b6442b636ee39b02951d771408e8frobbiew		strncpy(device, args->device, strlen(args->device));
6886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS
6896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(strstr(strlwr(device), RAWDEVICESTR) != NULL) {
690d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-I r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
6916e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_RAW;
6926b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		} else
6936b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
6946b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(strstr(strupr(device), BLKDEVICESTR) != NULL) {
695d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-I b) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
6966e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_BLK;
6976e112132382b6442b636ee39b02951d771408e8frobbiew		} else {
698d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
6996e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_FILE;
7006e112132382b6442b636ee39b02951d771408e8frobbiew		}
7016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		FREE(device);
7026e112132382b6442b636ee39b02951d771408e8frobbiew	}
7036e112132382b6442b636ee39b02951d771408e8frobbiew
7046e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->ltrsiz <= 0) {
7056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-B %d) ", TRSIZ*BLK_SIZE);
706d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
7076e112132382b6442b636ee39b02951d771408e8frobbiew		args->ltrsiz=TRSIZ;
7086e112132382b6442b636ee39b02951d771408e8frobbiew		args->htrsiz=TRSIZ;
7096e112132382b6442b636ee39b02951d771408e8frobbiew	}
7106b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->flags & CLD_FLG_LBA_RNG) {
7116b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->start_blk = args->start_lba / args->htrsiz;
7126b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(!(args->stop_lba < 0))
7136b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->stop_blk = args->stop_lba / args->htrsiz;
7146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7156e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->flags & CLD_FLG_BLK_RNG) {
7166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->start_lba = args->start_blk * args->htrsiz;
7176b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(!(args->stop_blk < 0))
7186b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->stop_lba = args->stop_blk * args->htrsiz;
7196b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	/* override volume size in cases were range is given */
7216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->flags & CLD_FLG_LBA_RNG) {
7226b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(!(args->stop_lba < 0))
7236b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->vsiz=args->stop_lba-args->start_lba+1;
7246b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7256b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->flags & CLD_FLG_BLK_RNG) {
7266b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(!(args->stop_lba < 0))
7276b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->vsiz=args->stop_lba-args->start_lba+args->htrsiz;
7286e112132382b6442b636ee39b02951d771408e8frobbiew	}
729d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	if((args->vsiz <=0) && (args->flags & CLD_FLG_FILE)) {
730d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		args->vsiz=get_file_size(args->device);
731d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	}
7326b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef AIX
7336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->vsiz <= 0) { args->vsiz=get_vsiz(args->device); }
7346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else
7356e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->vsiz <= 0) && (args->flags & CLD_FLG_BLK)) {
7366e112132382b6442b636ee39b02951d771408e8frobbiew		args->vsiz=get_vsiz(args->device);
7376e112132382b6442b636ee39b02951d771408e8frobbiew	}
7386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
7396e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->vsiz <= 0) {
7406e112132382b6442b636ee39b02951d771408e8frobbiew		args->vsiz=VSIZ;
7416b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(!(args->flags & CLD_FLG_VSIZ)) {
7436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS
7446b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-N %I64d) ", args->vsiz);
7456b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else
7466b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-N %lld) ", args->vsiz);
7476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
748d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
7496e112132382b6442b636ee39b02951d771408e8frobbiew	}
7506e112132382b6442b636ee39b02951d771408e8frobbiew
7516e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->stop_lba == -1) {
7526b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->stop_lba=args->vsiz-1;
7536b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
7546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->stop_blk == -1) {
7556b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		args->stop_blk=(args->vsiz / (OFF_T) args->htrsiz) - 1;
7566e112132382b6442b636ee39b02951d771408e8frobbiew	}
7576e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->t_kids == 0) {
7586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-K %d) ", KIDS);
759d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
7606e112132382b6442b636ee39b02951d771408e8frobbiew		args->t_kids=KIDS;
7616e112132382b6442b636ee39b02951d771408e8frobbiew	}
7626e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->flags & (CLD_FLG_W|CLD_FLG_R)) == 0) {
763d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		if(args->flags & CLD_FLG_DUTY) { /* no read/write but duty cycle specified */
764d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			if(args->rperc > 0) {
765d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_R;
766d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
767d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			}
768d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			if(args->wperc > 0) {
769d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				args->flags |= CLD_FLG_W;
770d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge				strncat(args->argstr, "(-w) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
771d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			}
772d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		} else {
773d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
774d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			args->flags |= CLD_FLG_R;
775d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
7766e112132382b6442b636ee39b02951d771408e8frobbiew	}
7776e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_PTYPS)) {
778d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, "(-c) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
7796e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_CPTYPE;
7806e112132382b6442b636ee39b02951d771408e8frobbiew	}
7816e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_SKTYPS)) {
782d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, "(-p r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
7836e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_RANDOM;
7846e112132382b6442b636ee39b02951d771408e8frobbiew	}
7856e112132382b6442b636ee39b02951d771408e8frobbiew	if(!(args->flags & CLD_FLG_SKS)) {
7866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		if(args->vsiz == args->htrsiz) { /* diskcache test */
7876b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->seeks = SEEKS;
7886b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		} else {
7896b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->seeks = (args->vsiz > 0) ? args->vsiz : SEEKS;
7906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew			args->seeks /= args->htrsiz;	/* calculated seeks are in terms of the largest transfer size */
7916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		}
7926e112132382b6442b636ee39b02951d771408e8frobbiew		if((args->flags & CLD_FLG_LINEAR) && (args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_W)) {
7936e112132382b6442b636ee39b02951d771408e8frobbiew			args->seeks *= 2;
7946e112132382b6442b636ee39b02951d771408e8frobbiew		}
795d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge
796d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		if(!(args->flags & CLD_FLG_TMD)) {
7976b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS
798d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			sprintf(TmpStr, "(-L %I64d) ", args->seeks);
7996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else
800d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			sprintf(TmpStr, "(-L %lld) ", args->seeks);
8016b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
802d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
803d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		}
8046e112132382b6442b636ee39b02951d771408e8frobbiew	}
8056b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(!(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)) || (args->flags & CLD_FLG_CYC)) {
8066e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_SKS;
8076e112132382b6442b636ee39b02951d771408e8frobbiew	}
8086e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->flags & (CLD_FLG_LINEAR)) {
8096e112132382b6442b636ee39b02951d771408e8frobbiew		if(!(args->flags & (CLD_FLG_LUNU|CLD_FLG_LUND))) {
810d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge			strncat(args->argstr, "(-p u) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
8116e112132382b6442b636ee39b02951d771408e8frobbiew			args->flags |= CLD_FLG_LUNU;
8126e112132382b6442b636ee39b02951d771408e8frobbiew		}
8136e112132382b6442b636ee39b02951d771408e8frobbiew	}
8146b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	normalize_percs(args);
8156b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(!(args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_RANDOM)) {
8166b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		sprintf(TmpStr, "(-D %d:%d)", args->rperc, args->wperc);
817d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
8186e112132382b6442b636ee39b02951d771408e8frobbiew		args->flags |= CLD_FLG_DUTY;
8196e112132382b6442b636ee39b02951d771408e8frobbiew	}
8206b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew
8216b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	return(0);
8226e112132382b6442b636ee39b02951d771408e8frobbiew}
8236e112132382b6442b636ee39b02951d771408e8frobbiew
8246e112132382b6442b636ee39b02951d771408e8frobbiew/*
8256e112132382b6442b636ee39b02951d771408e8frobbiew * checks validity of data after parsing
8266e112132382b6442b636ee39b02951d771408e8frobbiew * args and make assumtions. returns 0 on
8276e112132382b6442b636ee39b02951d771408e8frobbiew * success and -1 on failure.
8286e112132382b6442b636ee39b02951d771408e8frobbiew */
8296e112132382b6442b636ee39b02951d771408e8frobbiewint check_conclusions(child_args_t *args)
8306e112132382b6442b636ee39b02951d771408e8frobbiew{
8316b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_LINEAR)) {
832d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Duty cycle testing is supported for random (-pr) tests only.\n");
8336b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8346b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
8356b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_BLK_RNG) && (args->flags & CLD_FLG_RTRSIZ)) {
836d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Can't have unfixed block sizes and specify seek range in terms of blocks.\n");
8376b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8386b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
83963f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew	/* Commented out to not limit the block transfer size
8406b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->htrsiz > M_BLK_SIZE) {
841d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Transfer size exceeds max transfer size of %luk, use -B to adjust.\n", M_BLK_SIZE/2);
8426b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8436b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
84463f12ff6ff6ac8de6bba5201b43fbb258ea54f7brobbiew	*/
8456e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->vsiz < 0) || (args->ltrsiz < 1) || (args->htrsiz < 1)) {
846d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Bounds exceeded for transfer size and/or volume size.\n");
8476b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS
848d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Max transfer size is %lu and Volume size is %I64d\n",(args->htrsiz*BLK_SIZE),args->vsiz);
8496b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else
850d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Max transfer size is %lu and Volume size is %lld\n",(args->htrsiz*BLK_SIZE),args->vsiz);
8516b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
8526e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8536e112132382b6442b636ee39b02951d771408e8frobbiew	}
8546b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->vsiz < (args->stop_lba-args->start_lba+1)) {
855d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(ERR, args, "Volume stop block/lba exceeds volume size.\n");
8566e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8576e112132382b6442b636ee39b02951d771408e8frobbiew	}
8586b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->vsiz < args->htrsiz) {
859d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Volume size is to small for transfer size.\n");
8606b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8616b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
8626b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((!args->flags & CLD_FLG_TMD) && (args->seeks <= 0)) {
8636b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifdef WINDOWS
864d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN,args, "Total seeks of %I64d, is invalid.\n", args->seeks);
8656b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else
866d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN,args, "Total seeks of %lld, is invalid.\n", args->seeks);
8676b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
8686b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
8696b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
8706e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->flags & CLD_FLG_SKS) && (args->t_kids > args->seeks)) {
871d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Can't have more children then max number of seeks, use -K/-L to adjust.\n");
8726e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8736e112132382b6442b636ee39b02951d771408e8frobbiew	}
8746e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->start_blk > args->stop_blk) {
875d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Stop Block of range must be greater the Start Block.\n");
8766e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8776e112132382b6442b636ee39b02951d771408e8frobbiew	}
8786e112132382b6442b636ee39b02951d771408e8frobbiew	if(args->start_lba > args->stop_lba) {
879d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Stop LBA of range must be greater the Start LBA.\n");
8806e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8816e112132382b6442b636ee39b02951d771408e8frobbiew	}
8826b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_LBA_RNG) && (args->flags & CLD_FLG_BLK_RNG)) {
883d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Can't specify range in both block and LBA, use -s or -S.\n");
8846e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8856e112132382b6442b636ee39b02951d771408e8frobbiew	}
8866b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_FILE) && (strstr(args->device,BLKDEVICESTR) != NULL)) {
887d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Can't open block device with file I/O type.\n");
8886e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8896e112132382b6442b636ee39b02951d771408e8frobbiew	}
8906b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#ifndef WINDOWS
8916b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_BLK) && (strstr(args->device,RAWDEVICESTR) != NULL)) {
892d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Raw device filespec for Block I/O type.\n");
8936e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8946e112132382b6442b636ee39b02951d771408e8frobbiew	}
8956b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->flags & CLD_FLG_RAW) && (strstr(args->device,RAWDEVICESTR) == NULL)) {
896d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Device not a raw device.\n");
8976e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
8986e112132382b6442b636ee39b02951d771408e8frobbiew	}
8996b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#else
9006b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if(args->flags & CLD_FLG_RAW) {
901d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "RAW IO type not supported in WINDOWS environments.\n");
9026b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
9036b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
9046b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew#endif
9056e112132382b6442b636ee39b02951d771408e8frobbiew	if((args->hbeat > 0) && (args->flags & CLD_FLG_TMD) && (args->hbeat > args->run_time)) {
906d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Heartbeat should be at least equal to runtime, use -h/-T to adjust.\n");
9076b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew		return(-1);
9086b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	}
9096b98df5129acc12aad3167a9c6c12fda5afc6c31robbiew	if((args->hbeat > 0) && !(args->flags & CLD_FLG_PRFTYPS)) {
910d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "At least one performance option, -P, must be specified when using -h.\n");
9116e112132382b6442b636ee39b02951d771408e8frobbiew		return(-1);
9126e112132382b6442b636ee39b02951d771408e8frobbiew	}
913d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	if((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_CMPR)) {
914d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge		pMsg(WARN, args, "Write only, ignoring option -E.\n");
915d18ffdd88be3c62d027fd49a115bc9c4fe4b910cmridge	}
9166e112132382b6442b636ee39b02951d771408e8frobbiew	return(0);
9176e112132382b6442b636ee39b02951d771408e8frobbiew}
918