read_f(int argc, char **argv)

{

	struct timeval t1, t2;

	int Cflag = 0, pflag = 0, qflag = 0, vflag = 0;

	int Pflag = 0, sflag = 0, lflag = 0;

	int c, cnt;

	char *buf;

	int64_t offset;

	int count;

        /* Some compilers get confused and warn if this is not initialized.  */

        int total = 0;

	int pattern = 0, pattern_offset = 0, pattern_count = 0;



	while ((c = getopt(argc, argv, "Cl:pP:qs:v")) != EOF) {

		switch (c) {

		case 'C':

			Cflag = 1;

			break;

		case 'l':

			lflag = 1;

			pattern_count = cvtnum(optarg);

			if (pattern_count < 0) {

				printf("non-numeric length argument -- %s\n", optarg);

				return 0;

			}

			break;

		case 'p':

			pflag = 1;

			break;

		case 'P':

			Pflag = 1;

			pattern = atoi(optarg);

			break;

		case 'q':

			qflag = 1;

			break;

		case 's':

			sflag = 1;

			pattern_offset = cvtnum(optarg);

			if (pattern_offset < 0) {

				printf("non-numeric length argument -- %s\n", optarg);

				return 0;

			}

			break;

		case 'v':

			vflag = 1;

			break;

		default:

			return command_usage(&read_cmd);

		}

	}



	if (optind != argc - 2)

		return command_usage(&read_cmd);



	offset = cvtnum(argv[optind]);

	if (offset < 0) {

		printf("non-numeric length argument -- %s\n", argv[optind]);

		return 0;

	}



	optind++;

	count = cvtnum(argv[optind]);

	if (count < 0) {

		printf("non-numeric length argument -- %s\n", argv[optind]);

		return 0;

	}



    if (!Pflag && (lflag || sflag)) {

        return command_usage(&read_cmd);

    }



    if (!lflag) {

        pattern_count = count - pattern_offset;

    }



    if ((pattern_count < 0) || (pattern_count + pattern_offset > count))  {

        printf("pattern verfication range exceeds end of read data\n");

        return 0;

    }



	if (!pflag)

		if (offset & 0x1ff) {

			printf("offset %lld is not sector aligned\n",

				(long long)offset);

			return 0;



		if (count & 0x1ff) {

			printf("count %d is not sector aligned\n",

				count);

			return 0;

		}

	}



	buf = qemu_io_alloc(count, 0xab);



	gettimeofday(&t1, NULL);

	if (pflag)

		cnt = do_pread(buf, offset, count, &total);

	else

		cnt = do_read(buf, offset, count, &total);

	gettimeofday(&t2, NULL);



	if (cnt < 0) {

		printf("read failed: %s\n", strerror(-cnt));

		return 0;

	}



	if (Pflag) {

		void* cmp_buf = malloc(pattern_count);

		memset(cmp_buf, pattern, pattern_count);

		if (memcmp(buf + pattern_offset, cmp_buf, pattern_count)) {

			printf("Pattern verification failed at offset %lld, "

				"%d bytes\n",

				(long long) offset + pattern_offset, pattern_count);

		}

		free(cmp_buf);

	}



	if (qflag)

		return 0;



        if (vflag)

		dump_buffer(buf, offset, count);



	/* Finally, report back -- -C gives a parsable format */

	t2 = tsub(t2, t1);

	print_report("read", &t2, offset, count, total, cnt, Cflag);



	qemu_io_free(buf);



	return 0;

}

read_f(int argc, char **argv)

{

	struct timeval t1, t2;

	int Cflag = 0, pflag = 0, qflag = 0, vflag = 0;

	int Pflag = 0, sflag = 0, lflag = 0;

	int c, cnt;

	char *buf;

	int64_t offset;

	int count;

        

        int total = 0;

	int pattern = 0, pattern_offset = 0, pattern_count = 0;



	while ((c = getopt(argc, argv, "Cl:pP:qs:v")) != EOF) {

		switch (c) {

		case 'C':

			Cflag = 1;

			break;

		case 'l':

			lflag = 1;

			pattern_count = cvtnum(optarg);

			if (pattern_count < 0) {

				printf("non-numeric length argument -- %s\n", optarg);

				return 0;

			}

			break;

		case 'p':

			pflag = 1;

			break;

		case 'P':

			Pflag = 1;

			pattern = atoi(optarg);

			break;

		case 'q':

			qflag = 1;

			break;

		case 's':

			sflag = 1;

			pattern_offset = cvtnum(optarg);

			if (pattern_offset < 0) {

				printf("non-numeric length argument -- %s\n", optarg);

				return 0;

			}

			break;

		case 'v':

			vflag = 1;

			break;

		default:

			return command_usage(&read_cmd);

		}

	}



	if (optind != argc - 2)

		return command_usage(&read_cmd);



	offset = cvtnum(argv[optind]);

	if (offset < 0) {

		printf("non-numeric length argument -- %s\n", argv[optind]);

		return 0;

	}



	optind++;

	count = cvtnum(argv[optind]);

	if (count < 0) {

		printf("non-numeric length argument -- %s\n", argv[optind]);

		return 0;

	}



    if (!Pflag && (lflag || sflag)) {

        return command_usage(&read_cmd);

    }



    if (!lflag) {

        pattern_count = count - pattern_offset;

    }



    if ((pattern_count < 0) || (pattern_count + pattern_offset > count))  {

        printf("pattern verfication range exceeds end of read data\n");

        return 0;

    }



	if (!pflag)

		if (offset & 0x1ff) {

			printf("offset %lld is not sector aligned\n",

				(long long)offset);

			return 0;



		if (count & 0x1ff) {

			printf("count %d is not sector aligned\n",

				count);

			return 0;

		}

	}



	buf = qemu_io_alloc(count, 0xab);



	gettimeofday(&t1, NULL);

	if (pflag)

		cnt = do_pread(buf, offset, count, &total);

	else

		cnt = do_read(buf, offset, count, &total);

	gettimeofday(&t2, NULL);



	if (cnt < 0) {

		printf("read failed: %s\n", strerror(-cnt));

		return 0;

	}



	if (Pflag) {

		void* cmp_buf = malloc(pattern_count);

		memset(cmp_buf, pattern, pattern_count);

		if (memcmp(buf + pattern_offset, cmp_buf, pattern_count)) {

			printf("Pattern verification failed at offset %lld, "

				"%d bytes\n",

				(long long) offset + pattern_offset, pattern_count);

		}

		free(cmp_buf);

	}



	if (qflag)

		return 0;



        if (vflag)

		dump_buffer(buf, offset, count);



	

	t2 = tsub(t2, t1);

	print_report("read", &t2, offset, count, total, cnt, Cflag);



	qemu_io_free(buf);



	return 0;

}

		return 0; 		return 0; 		return 0; 		return 0; 		return 0; 		return 0; 		return 0; 		return 0;
FUNC_0(int VAR_0, char **VAR_1)

{

	struct timeval VAR_2, VAR_3;

	int VAR_4 = 0, VAR_5 = 0, VAR_6 = 0, VAR_7 = 0;

	int VAR_8 = 0, VAR_9 = 0, VAR_10 = 0;

	int VAR_11, VAR_12;

	char *VAR_13;

	int64_t offset;

	int VAR_14;

        

        int VAR_15 = 0;

	int VAR_16 = 0, VAR_17 = 0, VAR_18 = 0;



	while ((VAR_11 = getopt(VAR_0, VAR_1, "Cl:pP:qs:v")) != EOF) {

		switch (VAR_11) {

		case 'C':

			VAR_4 = 1;

			break;

		case 'l':

			VAR_10 = 1;

			VAR_18 = cvtnum(optarg);

			if (VAR_18 < 0) {

				printf("non-numeric length argument -- %s\n", optarg);

				return 0;

			}

			break;

		case 'p':

			VAR_5 = 1;

			break;

		case 'P':

			VAR_8 = 1;

			VAR_16 = atoi(optarg);

			break;

		case 'q':

			VAR_6 = 1;

			break;

		case 's':

			VAR_9 = 1;

			VAR_17 = cvtnum(optarg);

			if (VAR_17 < 0) {

				printf("non-numeric length argument -- %s\n", optarg);

				return 0;

			}

			break;

		case 'v':

			VAR_7 = 1;

			break;

		default:

			return command_usage(&read_cmd);

		}

	}



	if (optind != VAR_0 - 2)

		return command_usage(&read_cmd);



	offset = cvtnum(VAR_1[optind]);

	if (offset < 0) {

		printf("non-numeric length argument -- %s\n", VAR_1[optind]);

		return 0;

	}



	optind++;

	VAR_14 = cvtnum(VAR_1[optind]);

	if (VAR_14 < 0) {

		printf("non-numeric length argument -- %s\n", VAR_1[optind]);

		return 0;

	}



    if (!VAR_8 && (VAR_10 || VAR_9)) {

        return command_usage(&read_cmd);

    }



    if (!VAR_10) {

        VAR_18 = VAR_14 - VAR_17;

    }



    if ((VAR_18 < 0) || (VAR_18 + VAR_17 > VAR_14))  {

        printf("VAR_16 verfication range exceeds end of read data\n");

        return 0;

    }



	if (!VAR_5)

		if (offset & 0x1ff) {

			printf("offset %lld is not sector aligned\n",

				(long long)offset);

			return 0;



		if (VAR_14 & 0x1ff) {

			printf("VAR_14 %d is not sector aligned\n",

				VAR_14);

			return 0;

		}

	}



	VAR_13 = qemu_io_alloc(VAR_14, 0xab);



	gettimeofday(&VAR_2, NULL);

	if (VAR_5)

		VAR_12 = do_pread(VAR_13, offset, VAR_14, &VAR_15);

	else

		VAR_12 = do_read(VAR_13, offset, VAR_14, &VAR_15);

	gettimeofday(&VAR_3, NULL);



	if (VAR_12 < 0) {

		printf("read failed: %s\n", strerror(-VAR_12));

		return 0;

	}



	if (VAR_8) {

		void* VAR_19 = malloc(VAR_18);

		memset(VAR_19, VAR_16, VAR_18);

		if (memcmp(VAR_13 + VAR_17, VAR_19, VAR_18)) {

			printf("Pattern verification failed at offset %lld, "

				"%d bytes\n",

				(long long) offset + VAR_17, VAR_18);

		}

		free(VAR_19);

	}



	if (VAR_6)

		return 0;



        if (VAR_7)

		dump_buffer(VAR_13, offset, VAR_14);



	

	VAR_3 = tsub(VAR_3, VAR_2);

	print_report("read", &VAR_3, offset, VAR_14, VAR_15, VAR_12, VAR_4);



	qemu_io_free(VAR_13);



	return 0;

}

FUNC_0(int VAR_0, char **VAR_1)
{ struct timeval VAR_2, VAR_3; int VAR_4 = 0, VAR_5 = 0, VAR_6 = 0, VAR_7 = 0; int VAR_8 = 0, VAR_9 = 0, VAR_10 = 0; int VAR_11, VAR_12; char *VAR_13; int64_t offset; int VAR_14; int VAR_15 = 0; int VAR_16 = 0, VAR_17 = 0, VAR_18 = 0; while ((VAR_11 = getopt(VAR_0, VAR_1, "Cl:pP:qs:v")) != EOF) { switch (VAR_11) { case 'C':
VAR_4 = 1; break; case 'l':
VAR_10 = 1; VAR_18 = cvtnum(optarg); if (VAR_18 < 0) { printf("non-numeric length argument -- %s\n", optarg); return 0; } break; case 'p':
VAR_5 = 1; break; case 'P':
VAR_8 = 1; VAR_16 = atoi(optarg); break; case 'q':
VAR_6 = 1; break; case 's':
VAR_9 = 1; VAR_17 = cvtnum(optarg); if (VAR_17 < 0) { printf("non-numeric length argument -- %s\n", optarg); return 0; } break; case 'v':
VAR_7 = 1; break; default:
return command_usage(&read_cmd); } } if (optind != VAR_0 - 2)
return command_usage(&read_cmd); offset = cvtnum(VAR_1[optind]); if (offset < 0) { printf("non-numeric length argument -- %s\n", VAR_1[optind]); return 0; } optind++; VAR_14 = cvtnum(VAR_1[optind]); if (VAR_14 < 0) { printf("non-numeric length argument -- %s\n", VAR_1[optind]); return 0; } if (!VAR_8 && (VAR_10 || VAR_9)) { return command_usage(&read_cmd); } if (!VAR_10) { VAR_18 = VAR_14 - VAR_17; } if ((VAR_18 < 0) || (VAR_18 + VAR_17 > VAR_14))  { printf("VAR_16 verfication range exceeds end of read data\n"); return 0; } if (!VAR_5)
if (offset & 0x1ff) { printf("offset %lld is not sector aligned\n",
(long long)offset); return 0; if (VAR_14 & 0x1ff) { printf("VAR_14 %d is not sector aligned\n",
VAR_14); return 0; } } VAR_13 = qemu_io_alloc(VAR_14, 0xab); gettimeofday(&VAR_2, NULL); if (VAR_5)
VAR_12 = do_pread(VAR_13, offset, VAR_14, &VAR_15); else
VAR_12 = do_read(VAR_13, offset, VAR_14, &VAR_15); gettimeofday(&VAR_3, NULL); if (VAR_12 < 0) { printf("read failed: %s\n", strerror(-VAR_12)); return 0; } if (VAR_8) { void* VAR_19 = malloc(VAR_18); memset(VAR_19, VAR_16, VAR_18); if (memcmp(VAR_13 + VAR_17, VAR_19, VAR_18)) { printf("Pattern verification failed at offset %lld, "
"%d bytes\n",
(long long) offset + VAR_17, VAR_18); } free(VAR_19); } if (VAR_6)
return 0; if (VAR_7)
dump_buffer(VAR_13, offset, VAR_14); VAR_3 = tsub(VAR_3, VAR_2); print_report("read", &VAR_3, offset, VAR_14, VAR_15, VAR_12, VAR_4); qemu_io_free(VAR_13); return 0; }