X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsmall_write.c;h=26c0f9443dc83a750fb16ab46b72b7dffec15f41;hp=5bc2d950da954861ca81db702eb1e09dd9a32c03;hb=1de3c3455868670c289ed1d69f57244816ea39b5;hpb=a85b25f04f6ba5bb45c116927c9e5d0e4639dc97 diff --git a/lustre/tests/small_write.c b/lustre/tests/small_write.c index 5bc2d95..26c0f94 100644 --- a/lustre/tests/small_write.c +++ b/lustre/tests/small_write.c @@ -1,3 +1,32 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html + * + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + */ + #include #include #include @@ -7,42 +36,44 @@ #include #include +#define GOTO(label, rc) do { rc; goto label; } while (0) + int main (int argc, char **argv) { - int fd, i, rc; + int fd, i, rc = 0; unsigned long bytes, lbytes; struct stat st; char *str, *str2, *readbuf; if (argc != 3) { fprintf(stderr, "usage: %s \n", argv[0]); - return 1; + GOTO(out, rc = 1); } bytes = strtoul(argv[2], NULL, 10); if (!bytes) { printf("No bytes!\n"); - return 1; + GOTO(out, rc = 2); } if (bytes % 2) { printf("Need an even number of bytes!\n"); - return 1; + GOTO(out, rc = 3); } lbytes = 3*bytes/2; str = malloc(bytes+1); if (!str) { printf("No enough memory for %lu bytes.\n", bytes); - return 1; + GOTO(out, rc = 4); } str2 = malloc(lbytes+1); - if (!str) { + if (!str2) { printf("No enough memory for %lu bytes.\n", lbytes); - return 1; + GOTO(out_str, rc = 5); } readbuf = malloc(bytes*2); - if (!str) { + if (!readbuf) { printf("No enough memory for %lu bytes.\n", bytes*2); - return 1; + GOTO(out_str2, rc = 6); } for(i=0; i < bytes; i++) @@ -59,46 +90,48 @@ int main (int argc, char **argv) { fd = open(argv[1], O_CREAT|O_RDWR|O_TRUNC, 0700); if (fd == -1) { printf("Could not open file %s.\n", argv[1]); - return 1; + GOTO(out_readbuf, rc = 7); } rc = write(fd, str, bytes); if (rc != bytes) { printf("Write failed!\n"); - return 1; + GOTO(out_fd, rc = 8); } sleep(1); rc = fstat(fd, &st); if (rc < 0 || st.st_size != bytes) { printf("bad file %lu size first write %lu != %lu: rc %d\n", - st.st_ino, st.st_size, bytes, rc); - return 1; + (unsigned long)st.st_ino, (unsigned long)st.st_size, + bytes, rc); + GOTO(out_fd, rc = 9); } rc = lseek(fd, bytes / 2, SEEK_SET); if (rc != bytes / 2) { printf("Seek failed!\n"); - return 1; + GOTO(out_fd, rc = 10); } rc = write(fd, str, bytes); if (rc != bytes) { printf("Write failed!\n"); - return 1; + GOTO(out_fd, rc = 11); } rc = fstat(fd, &st); if (rc < 0 || st.st_size != bytes + bytes / 2) { printf("bad file %lu size second write %lu != %lu: rc %d\n", - st.st_ino, st.st_size, bytes, rc); - return 1; + (unsigned long)st.st_ino, (unsigned long)st.st_size, + bytes, rc); + GOTO(out_fd, rc = 12); } rc = lseek(fd, 0, SEEK_SET); if (rc != 0) { printf("Seek failed!\n"); - return 1; + GOTO(out_fd, rc = 13); } rc = read(fd, readbuf, bytes * 2); @@ -111,24 +144,31 @@ int main (int argc, char **argv) { rc = fstat(fd, &st); if (rc < 0 || st.st_size != bytes + bytes / 2) { printf("bad file size after read %lu != %lu: rc %d\n", - st.st_size, bytes + bytes / 2, rc); - return 1; + (unsigned long)st.st_size, bytes + bytes / 2, + rc); + GOTO(out_fd, rc = 14); } - return 1; + GOTO(out_fd, rc = 15); } - - fd = close(fd); - if (fd == -1) - return 1; + rc = 0; if (bytes < 320) printf("%s\n%s\n", readbuf, str2); if (strcmp(readbuf, str2)) { printf("No match!\n"); - return 1; + GOTO(out_fd, rc = 16); } printf("Pass!\n"); - return 0; +out_fd: + close(fd); +out_readbuf: + free(readbuf); +out_str2: + free(str2); +out_str: + free(str); +out: + return rc; }