X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fcheckstat.c;h=b53a82a21fa15fff3cd8a812e562b1508f7b0a6f;hb=f098e3c83da6c0f2341c69f6ce5820500ee98467;hp=ed97bd6861382b0e296f7e5fabe835d1988e890e;hpb=cc669f5de2e3017bea33065b6b085691b042f7bb;p=fs%2Flustre-release.git diff --git a/lustre/tests/checkstat.c b/lustre/tests/checkstat.c index ed97bd6..b53a82a 100644 --- a/lustre/tests/checkstat.c +++ b/lustre/tests/checkstat.c @@ -1,3 +1,39 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * 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 2008 Sun Microsystems, Inc. All rights reserved + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + */ + #include #include #include @@ -15,17 +51,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 +91,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 +128,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 +149,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 +158,7 @@ main (int argc, char **argv) uid = gr->gr_gid; } break; - + case 't': type = optarg; break; @@ -134,33 +170,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 +213,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 +266,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); } @@ -244,14 +282,15 @@ main (int argc, char **argv) { if (verbose) printf ("%s has size %Ld, not %Ld\n", - fname, (long long)buf.st_size, size); + fname, (long long)buf.st_size, + size); return (1); } - + if (verbose) printf ("%s has size %Ld OK\n", fname, size); } - + if (checklink != NULL) { static char lname[4<<10]; @@ -265,7 +304,7 @@ main (int argc, char **argv) fname, strerror (errno)); return (1); } - + lname[rc] = 0; if (strcmp (checklink, lname)) { @@ -274,7 +313,7 @@ main (int argc, char **argv) fname, lname, checklink); return (1); } - + if (verbose) printf ("%s links to %s OK\n", fname, checklink); } @@ -288,12 +327,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 +342,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); }