cleanup of fchownat01.c
Signed-off-by: Zeng Linggang <[email protected]>
---
testcases/kernel/syscalls/fchownat/fchownat01.c | 209 ++++++++----------------
1 file changed, 69 insertions(+), 140 deletions(-)
diff --git a/testcases/kernel/syscalls/fchownat/fchownat01.c
b/testcases/kernel/syscalls/fchownat/fchownat01.c
index 8a81f41..b46a721 100644
--- a/testcases/kernel/syscalls/fchownat/fchownat01.c
+++ b/testcases/kernel/syscalls/fchownat/fchownat01.c
@@ -13,8 +13,8 @@
* 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
*
* NAME
* fchownat01.c
@@ -55,89 +55,60 @@
#include <signal.h>
#include "test.h"
#include "usctest.h"
-#include "linux_syscall_numbers.h"
-
-#define TEST_CASES 6
-#ifndef AT_FDCWD
-#define AT_FDCWD -100
-#endif
-void setup();
-void cleanup();
-void setup_every_copy();
+#include "safe_macros.h"
+
+static void setup(void);
+static void cleanup(void);
+
+static uid_t uid;
+static gid_t gid;
+static char pathname[PATH_MAX+1];
+static char testfile[PATH_MAX+1];
+static char testfile2[PATH_MAX+1];
+static char testfile3[PATH_MAX+1];
+static int dirfd;
+static int fd;
+static int no_fd;
+static int cu_fd;
+
+static struct test_case_t {
+ int ret;
+ int flag;
+ int *fds;
+ char *filenames;
+} test_cases[] = {
+ {0, 0, &dirfd, testfile},
+ {0, 0, &dirfd, testfile2},
+ {ENOTDIR, 0, &fd, testfile},
+ {EBADF, 0, &no_fd, testfile},
+ {EINVAL, 9999, &dirfd, testfile},
+ {0, 0, &cu_fd, testfile},
+};
char *TCID = "fchownat01";
-int TST_TOTAL = TEST_CASES;
-char pathname[256];
-char testfile[256];
-char testfile2[256];
-char testfile3[256];
-int dirfd, fd, ret;
-int fds[TEST_CASES];
-char *filenames[TEST_CASES];
-int expected_errno[TEST_CASES] = { 0, 0, ENOTDIR, EBADF, EINVAL, 0 };
-int flags[TEST_CASES] = { 0, 0, 0, 0, 9999, 0 };
-
-uid_t uid;
-gid_t gid;
-
-int myfchownat(int dirfd, const char *filename, uid_t owner, gid_t group,
- int flags)
-{
- return ltp_syscall(__NR_fchownat, dirfd, filename, owner, group, flags);
-}
+int TST_TOTAL = ARRAY_SIZE(test_cases);
int main(int ac, char **av)
{
int lc;
- char *msg;
int i;
- /* Disable test if the version of the kernel is less than 2.6.16 */
- if ((tst_kvercmp(2, 6, 16)) < 0) {
- tst_resm(TWARN, "This test can only run on kernels that are ");
- tst_resm(TWARN, "2.6.16 and higher");
- exit(0);
- }
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL)
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
setup();
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
for (lc = 0; TEST_LOOPING(lc); lc++) {
- setup_every_copy();
tst_count = 0;
- /*
- * Call fchownat
- */
for (i = 0; i < TST_TOTAL; i++) {
- TEST(myfchownat
- (fds[i], filenames[i], uid, gid, flags[i]));
-
- /* check return code */
- if (TEST_ERRNO == expected_errno[i]) {
-
-
/***************************************************************
- * only perform functional verification if flag
set (-f not given)
-
***************************************************************/
- if (STD_FUNCTIONAL_TEST) {
- /* No Verification test, yet... */
- tst_resm(TPASS,
- "fchownat() returned the
expected errno %d: %s",
- TEST_ERRNO,
- strerror(TEST_ERRNO));
- }
+ TEST(fchownat(*test_cases[i].fds,
+ test_cases[i].filenames, uid, gid,
+ test_cases[i].flag));
+
+ if (TEST_ERRNO == test_cases[i].ret) {
+ tst_resm(TPASS,
+ "fchownat() returned the expected "
+ "errno %d: %s", TEST_ERRNO,
+ strerror(TEST_ERRNO));
} else {
TEST_ERROR_LOG(TEST_ERRNO);
tst_resm(TFAIL,
@@ -148,97 +119,55 @@ int main(int ac, char **av)
}
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
cleanup();
- return (0);
+ tst_exit();
}
-void setup_every_copy()
+void setup()
{
- /* Initialize test dir and file names */
+ uid = geteuid();
+ gid = getegid();
+
+ tst_sig(NOFORK, DEF_HANDLER, cleanup);
+
+ TEST_PAUSE;
+
sprintf(pathname, "fchownattestdir%d", getpid());
- sprintf(testfile, "fchownattestfile%d.txt", getpid());
- sprintf(testfile2, "/tmp/fchownattestfile%d.txt", getpid());
- sprintf(testfile3, "fchownattestdir%d/fchownattestfile%d.txt", getpid(),
- getpid());
- ret = mkdir(pathname, 0700);
- if (ret < 0) {
- perror("mkdir: ");
- exit(-1);
- }
+ SAFE_MKDIR(cleanup, pathname, 0700);
- dirfd = open(pathname, O_DIRECTORY);
- if (dirfd < 0) {
- perror("open: ");
- exit(-1);
- }
+ dirfd = SAFE_OPEN(cleanup, pathname, O_DIRECTORY);
- fd = open(testfile, O_CREAT | O_RDWR, 0600);
- if (fd < 0) {
- perror("open: ");
- exit(-1);
- }
+ sprintf(testfile, "fchownattestfile%d.txt", getpid());
- fd = open(testfile2, O_CREAT | O_RDWR, 0600);
- if (fd < 0) {
- perror("open: ");
- exit(-1);
- }
+ SAFE_OPEN(cleanup, testfile, O_CREAT | O_RDWR, 0600);
- fd = open(testfile3, O_CREAT | O_RDWR, 0600);
- if (fd < 0) {
- perror("open: ");
- exit(-1);
- }
+ sprintf(testfile2, "/tmp/fchownattestfile%d.txt", getpid());
- fds[0] = fds[1] = fds[4] = dirfd;
- fds[2] = fd;
- fds[3] = 100;
- fds[5] = AT_FDCWD;
+ SAFE_OPEN(cleanup, testfile2, O_CREAT | O_RDWR, 0600);
- filenames[0] = filenames[2] = filenames[3] = filenames[4] =
- filenames[5] = testfile;
- filenames[1] = testfile2;
-}
+ sprintf(testfile3, "fchownattestdir%d/fchownattestfile%d.txt", getpid(),
+ getpid());
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void setup()
-{
- /* Set uid and gid */
- uid = geteuid();
- gid = getegid();
+ fd = SAFE_OPEN(cleanup, testfile3, O_CREAT | O_RDWR, 0600);
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
+ no_fd = 100;
- TEST_PAUSE;
+ cu_fd = AT_FDCWD;
}
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
void cleanup()
{
- /* Remove them */
- char tmppathname[256];
- strcpy(tmppathname, pathname);
-
- close(fd);
- unlink(testfile);
- unlink(testfile2);
- unlink(testfile3);
+ SAFE_CLOSE(NULL, fd);
+
+ SAFE_UNLINK(NULL, testfile);
+
+ SAFE_UNLINK(NULL, testfile2);
+
+ SAFE_UNLINK(NULL, testfile3);
+
rmdir(pathname);
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
TEST_CLEANUP;
-
}
--
1.8.2.1
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list