Whamcloud - gitweb
b=16098
[fs/lustre-release.git] / lustre / tests / toexcl.c
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  * GPL HEADER START
5  *
6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 only,
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License version 2 for more details (a copy is included
16  * in the LICENSE file that accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License
19  * version 2 along with this program; If not, see
20  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
21  *
22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23  * CA 95054 USA or visit www.sun.com if you need additional information or
24  * have any questions.
25  *
26  * GPL HEADER END
27  */
28 /*
29  * Copyright  2008 Sun Microsystems, Inc. All rights reserved
30  * Use is subject to license terms.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  */
36
37 #include <sys/types.h>
38 #include <sys/stat.h>
39 #include <stdio.h>
40 #include <stdlib.h>
41 #include <fcntl.h>
42 #include <errno.h>
43 #include <string.h>
44 #include <unistd.h>
45
46 void
47 usage (char *argv0, int help)
48 {
49         char *progname = strrchr(argv0, '/');
50
51         if (progname == NULL)
52                 progname = argv0;
53         
54         fprintf (help ? stdout : stderr,
55                  "Usage: %s [-e] file\n", progname);
56         
57         if (!help)
58         {
59                 fprintf (stderr, "   or try '-h' for help\n");
60                 exit (1);
61         }
62         
63         printf ("Create the given file with O_EXCL...\n");
64         printf (" -e    expect EEXIST\n");
65         printf (" -h    print help");
66         printf (" Exit status is 0 on success, 1 on failure\n");
67 }
68
69 int main(int argc, char **argv)
70 {
71         int rc;
72         int want_eexist = 0;
73         
74         while ((rc = getopt (argc, argv, "eh")) != -1)
75                 switch (rc)
76                 {
77                 case 'e':
78                         want_eexist = 1;
79                         break;
80                 case 'h':
81                         usage (argv[1], 1);
82                         return (0);
83                 default:
84                         usage (argv[0], 0);
85                 }
86         
87         if (optind != argc - 1) { 
88                 usage (argv[0], 0);
89                 return 1;
90         }
91
92         rc = open(argv[optind], O_CREAT|O_EXCL, 0644);
93         if (rc == -1)
94         {
95                 if (want_eexist && errno == EEXIST)
96                 {
97                         printf("open failed: %s (expected)\n", strerror(errno));
98                         return (0);
99                 }
100                 printf("open failed: %s\n", strerror(errno));
101                 return (1);
102         } else {
103                 if (want_eexist)
104                 {
105                         printf("open success (expecting EEXIST).\n");
106                         return (1);
107                 }
108                 printf("open success.\n");
109                 return (0);
110         }
111         
112         return ((rc == 0) ? 0 : 1);
113 }