1 /*
2 * Copyright (c) International Business Machines Corp., 2001
3 * 07/2001 Ported by John George
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it would be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13 * the GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write the Free Software Foundation,
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 /*
21 * umask(2) sets the mask from 0000 to 0777 while we create files,
22 * the previous value of the mask should be returned correctly,
23 * and the file mode should be correct for each creation mask.
24 */
25
26 #include <errno.h>
27 #include <stdio.h>
28 #include <sys/types.h>
29 #include <sys/stat.h>
30 #include "tst_test.h"
31
verify_umask(void)32 static void verify_umask(void)
33 {
34 struct stat statbuf;
35 int mskval;
36 int fd;
37 int failflag = 0;
38 unsigned low9mode;
39
40 for (mskval = 0000; mskval < 01000; mskval++) {
41 TEST(umask(mskval));
42 if (TST_RET < 0 || TST_RET > 0777) {
43 tst_brk(TFAIL, "umask(%o) result outside range %ld",
44 mskval, TST_RET);
45 }
46
47 if (mskval > 0000 && TST_RET != mskval - 1) {
48 failflag = 1;
49 tst_res(TFAIL, "umask(%o) returned %ld, expected %d",
50 mskval, TST_RET, mskval - 1);
51 }
52
53 fd = SAFE_CREAT("testfile", 0777);
54 SAFE_CLOSE(fd);
55
56 SAFE_STAT("testfile", &statbuf);
57
58 low9mode = statbuf.st_mode & 0777;
59
60 if (low9mode != (~mskval & 0777)) {
61 failflag = 1;
62 tst_res(TFAIL, "File mode got %o, expected %o",
63 low9mode, ~mskval & 0777);
64 }
65
66 SAFE_UNLINK("testfile");
67 }
68
69 if (!failflag)
70 tst_res(TPASS, "All files created with correct mode");
71 }
72
73 static struct tst_test test = {
74 .test_all = verify_umask,
75 .needs_tmpdir = 1,
76 };
77