1. Delete some comments 2. Add 'static' before the global variable and func 3. Remove setup1() and setup2() 4. Some cleanup
Signed-off-by: Zeng Linggang <[email protected]> --- testcases/kernel/syscalls/fchown/fchown04.c | 161 ++++++---------------------- 1 file changed, 34 insertions(+), 127 deletions(-) diff --git a/testcases/kernel/syscalls/fchown/fchown04.c b/testcases/kernel/syscalls/fchown/fchown04.c index 8329550..f5772e3 100644 --- a/testcases/kernel/syscalls/fchown/fchown04.c +++ b/testcases/kernel/syscalls/fchown/fchown04.c @@ -1,6 +1,7 @@ /* * * Copyright (c) International Business Machines Corp., 2001 + * 07/2001 Ported by Wayne Boyer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -13,59 +14,12 @@ * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* - * Test Name: fchown04 - * - * Test Description: - * Verify that, - * 1) fchown(2) returns -1 and sets errno to EPERM if the effective user id - * of process does not match the owner of the file and the process is - * not super user. - * 2) fchown(2) returns -1 and sets errno to EBADF if the file descriptor - * of the specified file is not valid. - * - * Expected Result: - * fchown() should fail with return value -1 and set expected errno. - * - * Algorithm: - * Setup: - * Setup signal handling. - * Create temporary directory. - * Pause for SIGUSR1 if option specified. - * - * Test: - * Loop if the proper options are given. - * Execute system call - * Check return code, if system call failed (return=-1) - * if errno set == expected errno - * Issue sys call fails with expected return value and errno. - * Otherwise, - * Issue sys call fails with unexpected errno. - * Otherwise, - * Issue sys call returns unexpected value. - * - * Cleanup: - * Print errno log and/or timing stats if options given - * Delete the temporary directory(s)/file(s) created. - * - * Usage: <for command-line> - * fchown04 [-c n] [-e] [-i n] [-I x] [-P x] [-t] - * where, -c n : Run n copies concurrently. - * -e : Turn on errno logging. - * -i n : Execute test n times. - * -I x : Execute test for x seconds. - * -P x : Pause for x seconds between iterations. - * -t : Turn on syscall timing. - * - * HISTORY - * 07/2001 Ported by Wayne Boyer - * - * RESTRICTIONS: - * This test should be executed by 'non-super-user' only. + * Test that fchown() fails and sets the proper errno values. */ #include <stdio.h> @@ -84,47 +38,35 @@ #include "usctest.h" #include "safe_macros.h" -#define MODE_RWX (S_IRWXU|S_IRWXG|S_IRWXO) -#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) -#define TEST_FILE1 "tfile_1" -#define TEST_FILE2 "tfile_2" - -void setup1(); /* setup function to test chmod for EPERM */ -void setup2(); /* setup function to test chmod for EBADF */ -int fd1; /* File descriptor for testfile1 */ -int fd2; /* File descriptor for testfile2 */ +static int fd1; +static int fd2; -struct test_case_t { /* test case struct. to hold ref. test cond's */ - int fd; +static struct test_case_t { + int *fd; int exp_errno; - void (*setupfunc) (); } test_cases[] = { - { - 1, EPERM, setup1}, { -2, EBADF, setup2},}; + {&fd1, EPERM}, + {&fd2, EBADF}, +}; -char test_home[PATH_MAX]; /* variable to hold TESTHOME env */ char *TCID = "fchown04"; -int TST_TOTAL = 2; -int exp_enos[] = { EPERM, EBADF, 0 }; +int TST_TOTAL = ARRAY_SIZE(test_cases); +static int exp_enos[] = { EPERM, EBADF, 0 }; -char bin_uid[] = "bin"; -struct passwd *ltpuser; - -void setup(); /* Main setup function for the tests */ -void cleanup(); /* cleanup function for the test */ +static void setup(void); +static void cleanup(void); int main(int ac, char **av) { int lc; char *msg; - int fd; /* test file descriptor */ int i; - uid_t user_id; /* Effective user id of a test process */ - gid_t group_id; /* Effective group id of a test process */ + uid_t user_id; + gid_t group_id; - if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) + msg = parse_opts(ac, av, NULL, NULL); + if (msg != NULL) tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); setup(); @@ -140,30 +82,24 @@ int main(int ac, char **av) for (i = 0; i < TST_TOTAL; i++) { - fd = test_cases[i].fd; - - if (fd == 1) - fd = fd1; - else - fd = fd2; - - TEST(fchown(fd, user_id, group_id)); + TEST(fchown(*test_cases[i].fd, user_id, group_id)); if (TEST_RETURN == -1) { - if (TEST_ERRNO == test_cases[i].exp_errno) + if (TEST_ERRNO == test_cases[i].exp_errno) { tst_resm(TPASS | TTERRNO, "fchown failed as expected"); - else + } else { tst_resm(TFAIL | TTERRNO, "fchown failed unexpectedly; " "expected %d - %s", test_cases[i].exp_errno, strerror(test_cases[i]. exp_errno)); - } else + } + } else { tst_resm(TFAIL, "fchown passed unexpectedly"); + } } - } cleanup(); @@ -171,63 +107,34 @@ int main(int ac, char **av) tst_exit(); } -void setup() +static void setup(void) { - int i; + struct passwd *ltpuser; TEST_PAUSE; tst_require_root(NULL); - ltpuser = SAFE_GETPWNAM(NULL, bin_uid); - tst_tmpdir(); tst_sig(FORK, DEF_HANDLER, cleanup); - initgroups("root", getgid()); + fd1 = SAFE_OPEN(cleanup, "tfile_1", O_RDWR | O_CREAT, 0666); - SAFE_SETEGID(NULL, ltpuser->pw_uid); - SAFE_SETEUID(NULL, ltpuser->pw_gid); - - tst_tmpdir(); - - for (i = 0; i < TST_TOTAL; i++) - if (test_cases[i].setupfunc != NULL) - test_cases[i].setupfunc(); -} - -void setup1() -{ - int old_uid; - struct passwd *nobody; - - fd1 = SAFE_OPEN(cleanup, TEST_FILE1, O_RDWR | O_CREAT, 0666); - - old_uid = geteuid(); - - SAFE_SETEUID(cleanup, 0); - - nobody = SAFE_GETPWNAM(cleanup, "nobody"); - - if (fchown(fd1, nobody->pw_uid, nobody->pw_gid) < 0) - tst_brkm(TBROK | TERRNO, cleanup, "fchown failed"); + fd2 = SAFE_OPEN(cleanup, "tfile_2", O_RDWR | O_CREAT, 0666); + SAFE_CLOSE(cleanup, fd2); - SAFE_SETEUID(cleanup, old_uid); + ltpuser = SAFE_GETPWNAM(cleanup, "nobody"); + SAFE_SETEUID(cleanup, ltpuser->pw_uid); } -void setup2() +static void cleanup(void) { - fd2 = SAFE_OPEN(cleanup, TEST_FILE2, O_RDWR | O_CREAT, 0666); - SAFE_CLOSE(cleanup, fd2); -} + SAFE_SETEUID(NULL, 0); -void cleanup() -{ TEST_CLEANUP; SAFE_CLOSE(NULL, fd1); tst_rmdir(); - } -- 1.8.2.1 ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
