X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Ftests%2Fcheckstat.c;h=8128bc29cfcd102f65422b08dbbe4b89be94dc5b;hb=0585b0fb5895a24f07ca32e830d1fa72b75f4f2b;hp=ed97bd6861382b0e296f7e5fabe835d1988e890e;hpb=cc669f5de2e3017bea33065b6b085691b042f7bb;p=fs%2Flustre-release.git diff --git a/lustre/tests/checkstat.c b/lustre/tests/checkstat.c index ed97bd6..8128bc2 100644 --- a/lustre/tests/checkstat.c +++ b/lustre/tests/checkstat.c @@ -1,3 +1,44 @@ +/* + * 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.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. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2011, Intel Corporation. + */ +/* + * Test program to compare the attributes of a files to verify that it + * desired file attributes are present. This file predates availability + * of the stat(3) utility and is deprecated. Either test(3) ([ ]) or + * stat(3) should be used in all new tests. + * + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + */ + #include #include #include @@ -15,17 +56,17 @@ usage (char *argv0, int help) if (progname == NULL) progname = argv0; - + fprintf (help ? stdout : stderr, "Usage: %s [flags] file[s]\n", progname); - + if (!help) { fprintf (stderr, " or try '-h' for help\n"); exit (1); } - + printf ("Check given files have...\n"); printf (" -p permission file must have required permissions\n"); printf (" -t dir|file|link file must be of the specified type\n"); @@ -55,7 +96,7 @@ main (int argc, char **argv) long long size = -1; int follow = 0; char *term; - + while ((c = getopt (argc, argv, "p:t:l:s:u:g:avfh")) != -1) switch (c) { @@ -92,7 +133,7 @@ main (int argc, char **argv) } } else { struct passwd *pw = getpwnam (optarg); - + if (pw == NULL) { fprintf (stderr, "Can't find user %s\n", optarg); @@ -113,7 +154,7 @@ main (int argc, char **argv) } } else { struct group *gr = getgrnam (optarg); - + if (gr == NULL) { fprintf (stderr, "Can't find group %s\n", optarg); @@ -122,7 +163,7 @@ main (int argc, char **argv) uid = gr->gr_gid; } break; - + case 't': type = optarg; break; @@ -134,33 +175,33 @@ main (int argc, char **argv) case 'v': verbose++; break; - + case 'f': follow++; break; - + case 'h': usage (argv[0], 1); return (0); - + default: usage (argv[0], 0); } if (optind == argc) usage (argv[0], 0); - + do { char *fname = argv[optind]; int rc = follow ? stat64 (fname, &buf) : lstat64 (fname, &buf); - + if (rc != 0) { if (!(absent && errno == ENOENT)) { if (verbose) - printf ("Can't %sstat %s: %s\n", + printf ("Can't %sstat %s: %s\n", follow ? "" : "l", fname, strerror (errno)); return (1); @@ -177,48 +218,49 @@ main (int argc, char **argv) printf ("%s exists\n", fname); return (1); } - + if (type != NULL) { - if (!strcmp (type, "d") || + if (!strcmp (type, "d") || !strcmp (type, "dir")) { if (!S_ISDIR (buf.st_mode)) { if (verbose) - printf ("%s is not a directory\n", + printf ("%s is not a directory\n", fname); return (1); } } - else if (!strcmp (type, "f") || + else if (!strcmp (type, "f") || !strcmp (type, "file")) { if (!S_ISREG (buf.st_mode)) { if (verbose) - printf ("%s is not a regular file\n", + printf ("%s is not a regular file\n", fname); return (1); } } - else if (!strcmp (type, "l") || + else if (!strcmp (type, "l") || !strcmp (type, "link")) { if (!S_ISLNK (buf.st_mode)) { if (verbose) - printf ("%s is not a link\n", + printf ("%s is not a link\n", fname); return (1); } } else { - fprintf (stderr, "Can't parse file type %s\n", type); + fprintf (stderr, "Can't parse file type %s\n", + type); return (1); } - + if (verbose) printf ("%s has type %s OK\n", fname, type); } @@ -229,7 +271,8 @@ main (int argc, char **argv) { if (verbose) printf ("%s has perms 0%o, not 0%o\n", - fname, (buf.st_mode & ~S_IFMT), perms); + fname, (buf.st_mode & ~S_IFMT), + perms); return (1); } @@ -238,20 +281,19 @@ main (int argc, char **argv) fname, perms); } - if (size != -1) - { - if (buf.st_size != size) - { - if (verbose) - printf ("%s has size %Ld, not %Ld\n", - fname, (long long)buf.st_size, size); - return (1); - } - - if (verbose) - printf ("%s has size %Ld OK\n", fname, size); - } - + if (size != -1) { + if (buf.st_size != size) { + if (verbose) + printf("%s has size %lld, not %lld\n", + fname, (long long)buf.st_size, + size); + return 1; + } + + if (verbose) + printf("%s has size %lld OK\n", fname, size); + } + if (checklink != NULL) { static char lname[4<<10]; @@ -265,7 +307,7 @@ main (int argc, char **argv) fname, strerror (errno)); return (1); } - + lname[rc] = 0; if (strcmp (checklink, lname)) { @@ -274,7 +316,7 @@ main (int argc, char **argv) fname, lname, checklink); return (1); } - + if (verbose) printf ("%s links to %s OK\n", fname, checklink); } @@ -288,12 +330,12 @@ main (int argc, char **argv) fname, (long)buf.st_uid, (long)uid); return (1); } - + if (verbose) printf ("%s is owned by user #%ld OK\n", fname, (long)uid); } - + if (gid != (gid_t)-1) { if (buf.st_gid != gid) @@ -303,13 +345,12 @@ main (int argc, char **argv) fname, (long)buf.st_gid, (long)gid); return (1); } - + if (verbose) printf ("%s is owned by group #%ld OK\n", fname, (long)gid); } - } while (++optind < argc); - + return (0); }