1f08c3bdfSopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 2f08c3bdfSopenharmony_ci/* 3f08c3bdfSopenharmony_ci * Copyright (c) International Business Machines Corp., 2001 4f08c3bdfSopenharmony_ci * 07/2001 Ported by Wayne Boyer 5f08c3bdfSopenharmony_ci * Copyright (c) 2022 SUSE LLC Avinesh Kumar <avinesh.kumar@suse.com> 6f08c3bdfSopenharmony_ci */ 7f08c3bdfSopenharmony_ci 8f08c3bdfSopenharmony_ci/*\ 9f08c3bdfSopenharmony_ci * [Description] 10f08c3bdfSopenharmony_ci * 11f08c3bdfSopenharmony_ci * Verify rename(2) functions correctly when the newpath 12f08c3bdfSopenharmony_ci * file or directory (empty) exists. 13f08c3bdfSopenharmony_ci */ 14f08c3bdfSopenharmony_ci 15f08c3bdfSopenharmony_ci#include <sys/stat.h> 16f08c3bdfSopenharmony_ci#include <stdio.h> 17f08c3bdfSopenharmony_ci#include "tst_test.h" 18f08c3bdfSopenharmony_ci 19f08c3bdfSopenharmony_ci#define MNT_POINT "mntpoint" 20f08c3bdfSopenharmony_ci#define OLD_FILE_NAME MNT_POINT"/oldfile" 21f08c3bdfSopenharmony_ci#define NEW_FILE_NAME MNT_POINT"/newfile" 22f08c3bdfSopenharmony_ci#define OLD_DIR_NAME MNT_POINT"/olddir" 23f08c3bdfSopenharmony_ci#define NEW_DIR_NAME MNT_POINT"/newdir" 24f08c3bdfSopenharmony_ci 25f08c3bdfSopenharmony_cistatic struct stat old_file_st, old_dir_st, new_file_st, new_dir_st; 26f08c3bdfSopenharmony_ci 27f08c3bdfSopenharmony_cistatic void run(void) 28f08c3bdfSopenharmony_ci{ 29f08c3bdfSopenharmony_ci SAFE_TOUCH(OLD_FILE_NAME, 0700, NULL); 30f08c3bdfSopenharmony_ci SAFE_MKDIR(OLD_DIR_NAME, 00770); 31f08c3bdfSopenharmony_ci SAFE_TOUCH(NEW_FILE_NAME, 0700, NULL); 32f08c3bdfSopenharmony_ci SAFE_MKDIR(NEW_DIR_NAME, 00770); 33f08c3bdfSopenharmony_ci 34f08c3bdfSopenharmony_ci SAFE_STAT(OLD_FILE_NAME, &old_file_st); 35f08c3bdfSopenharmony_ci SAFE_STAT(OLD_DIR_NAME, &old_dir_st); 36f08c3bdfSopenharmony_ci 37f08c3bdfSopenharmony_ci TST_EXP_PASS(rename(OLD_FILE_NAME, NEW_FILE_NAME), 38f08c3bdfSopenharmony_ci "rename(%s, %s)", 39f08c3bdfSopenharmony_ci OLD_FILE_NAME, NEW_FILE_NAME); 40f08c3bdfSopenharmony_ci TST_EXP_PASS(rename(OLD_DIR_NAME, NEW_DIR_NAME), 41f08c3bdfSopenharmony_ci "rename(%s, %s)", 42f08c3bdfSopenharmony_ci OLD_DIR_NAME, NEW_DIR_NAME); 43f08c3bdfSopenharmony_ci 44f08c3bdfSopenharmony_ci SAFE_STAT(NEW_FILE_NAME, &new_file_st); 45f08c3bdfSopenharmony_ci SAFE_STAT(NEW_DIR_NAME, &new_dir_st); 46f08c3bdfSopenharmony_ci 47f08c3bdfSopenharmony_ci TST_EXP_EQ_LU(old_file_st.st_dev, new_file_st.st_dev); 48f08c3bdfSopenharmony_ci TST_EXP_EQ_LU(old_file_st.st_ino, new_file_st.st_ino); 49f08c3bdfSopenharmony_ci 50f08c3bdfSopenharmony_ci TST_EXP_EQ_LU(old_dir_st.st_dev, new_dir_st.st_dev); 51f08c3bdfSopenharmony_ci TST_EXP_EQ_LU(old_dir_st.st_ino, new_dir_st.st_ino); 52f08c3bdfSopenharmony_ci 53f08c3bdfSopenharmony_ci TST_EXP_FAIL(stat(OLD_FILE_NAME, &old_file_st), 54f08c3bdfSopenharmony_ci ENOENT, 55f08c3bdfSopenharmony_ci "stat(%s, &old_file_st)", 56f08c3bdfSopenharmony_ci OLD_FILE_NAME); 57f08c3bdfSopenharmony_ci TST_EXP_FAIL(stat(OLD_DIR_NAME, &old_dir_st), 58f08c3bdfSopenharmony_ci ENOENT, 59f08c3bdfSopenharmony_ci "stat(%s, &old_dir_st)", 60f08c3bdfSopenharmony_ci OLD_DIR_NAME); 61f08c3bdfSopenharmony_ci 62f08c3bdfSopenharmony_ci /* cleanup between loops */ 63f08c3bdfSopenharmony_ci SAFE_UNLINK(NEW_FILE_NAME); 64f08c3bdfSopenharmony_ci SAFE_RMDIR(NEW_DIR_NAME); 65f08c3bdfSopenharmony_ci} 66f08c3bdfSopenharmony_ci 67f08c3bdfSopenharmony_cistatic struct tst_test test = { 68f08c3bdfSopenharmony_ci .test_all = run, 69f08c3bdfSopenharmony_ci .needs_root = 1, 70f08c3bdfSopenharmony_ci .mount_device = 1, 71f08c3bdfSopenharmony_ci .mntpoint = MNT_POINT, 72f08c3bdfSopenharmony_ci .all_filesystems = 1 73f08c3bdfSopenharmony_ci}; 74