X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fopendirunlink.c;h=5fe38a5ce05eb32bc5b8ddc024961c30243afa2e;hp=26400e7af97de67c404f24704cbbe6fcbe1baf80;hb=0732254bc8b7351f1e168c04d5124f16bc762c64;hpb=e3a7c58aebafce40323db54bf6056029e5af4a70 diff --git a/lustre/tests/opendirunlink.c b/lustre/tests/opendirunlink.c index 26400e7..5fe38a5 100644 --- a/lustre/tests/opendirunlink.c +++ b/lustre/tests/opendirunlink.c @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -49,106 +45,95 @@ int main(int argc, char **argv) { - char *dname1, *dname2; - int fddir1, fddir2, rc; - //DIR *dp; - struct stat st1, st2; - - if (argc < 2 || argc > 3) { - fprintf(stderr, "usage: %s dirname1 [dirname2]\n", argv[0]); - exit(1); - } - - dname1 = argv[1]; - if (argc == 3) - dname2 = argv[2]; - else - dname2 = argv[1]; - - //create the directory - fprintf(stderr, "creating directory %s\n", dname1); - rc = mkdir(dname1, 0744); - if (rc == -1) { - fprintf(stderr, "creating %s fails: %s\n", - dname1, strerror(errno)); - exit(1); - } - - // open the dir again - fprintf(stderr, "opening directory\n"); - fddir1 = open(dname1, O_RDONLY | O_DIRECTORY); - if (fddir1 == -1) { - fprintf(stderr, "open %s fails: %s\n", - dname1, strerror(errno)); - exit(2); - } - - // doesn't matter if the two dirs are the same?? - fddir2 = open(dname2, O_RDONLY | O_DIRECTORY); - if (fddir2 == -1) { - fprintf(stderr, "open %s fails: %s\n", - dname2, strerror(errno)); - exit(3); - } - - // another method -/* - if ( (dp = opendir(dname2)) == NULL) { - fprintf(stderr, "opendir() %s\n", strerror(errno)); - exit(1); - } - fddir = dirfd(dp); -*/ - - // delete the dir - fprintf (stderr, "unlinking %s\n", dname1); - rc = rmdir(dname1); - if (rc) { - fprintf(stderr, "unlink %s error: %s\n", - dname1, strerror(errno)); - exit(4); - } - - if (access(dname2, F_OK) == 0){ - fprintf(stderr, "%s still exists\n", dname2); - exit(5); - } - - if (access(dname1, F_OK) == 0){ - fprintf(stderr, "%s still exists\n", dname1); - exit(6); - } - - // fchmod the dir - rc = fchmod (fddir1, 0777); - if(rc == -1) - { - fprintf(stderr, "fchmod unlinked dir fails %s\n", - strerror(errno)); - exit(7); - } - - // fstat two dirs to check if they are the same - rc = fstat(fddir1, &st1); - if(rc == -1) - { - fprintf(stderr, "fstat unlinked dir %s fails %s\n", - dname1, strerror(errno)); - exit(8); - } - - rc = fstat(fddir2, &st2); - if (rc == -1) { - fprintf(stderr, "fstat dir %s fails %s\n", - dname2, strerror(errno)); - exit(9); - } - - if (st1.st_mode != st2.st_mode) { // can we do this? - fprintf(stderr, "fstat different value on %s and %s\n", dname1, dname2); - exit(10); - } - - fprintf(stderr, "Ok, everything goes well.\n"); - return 0; + char *dname1, *dname2; + int fddir1, fddir2, rc; + struct stat st1, st2; + + if (argc < 2 || argc > 3) { + fprintf(stderr, "usage: %s dirname1 [dirname2]\n", argv[0]); + exit(1); + } + + dname1 = argv[1]; + if (argc == 3) + dname2 = argv[2]; + else + dname2 = argv[1]; + + /* create the directory */ + fprintf(stderr, "creating directory %s\n", dname1); + rc = mkdir(dname1, 0744); + if (rc == -1) { + fprintf(stderr, "creating %s fails: %s\n", + dname1, strerror(errno)); + exit(1); + } + + /* open the dir again */ + fprintf(stderr, "opening directory\n"); + fddir1 = open(dname1, O_RDONLY | O_DIRECTORY); + if (fddir1 == -1) { + fprintf(stderr, "open %s fails: %s\n", + dname1, strerror(errno)); + exit(2); + } + + /* doesn't matter if the two dirs are the same?? */ + fddir2 = open(dname2, O_RDONLY | O_DIRECTORY); + if (fddir2 == -1) { + fprintf(stderr, "open %s fails: %s\n", + dname2, strerror(errno)); + exit(3); + } + + /* delete the dir */ + fprintf(stderr, "unlinking %s\n", dname1); + rc = rmdir(dname1); + if (rc) { + fprintf(stderr, "unlink %s error: %s\n", + dname1, strerror(errno)); + exit(4); + } + + if (access(dname2, F_OK) == 0) { + fprintf(stderr, "%s still exists\n", dname2); + exit(5); + } + + if (access(dname1, F_OK) == 0) { + fprintf(stderr, "%s still exists\n", dname1); + exit(6); + } + + /* fchmod the dir */ + rc = fchmod(fddir1, 0777); + if (rc == -1) { + fprintf(stderr, "fchmod unlinked dir fails %s\n", + strerror(errno)); + exit(7); + } + + /* fstat two dirs to check if they are the same */ + rc = fstat(fddir1, &st1); + if (rc == -1) { + fprintf(stderr, "fstat unlinked dir %s fails %s\n", + dname1, strerror(errno)); + exit(8); + } + + rc = fstat(fddir2, &st2); + if (rc == -1) { + fprintf(stderr, "fstat dir %s fails %s\n", + dname2, strerror(errno)); + exit(9); + } + + if (st1.st_mode != st2.st_mode) { /* can we do this? */ + fprintf(stderr, "fstat different value on %s and %s\n", + dname1, dname2); + exit(10); + } + + fprintf(stderr, "Ok, everything goes well.\n"); + return 0; }