All of lore.kernel.org
 help / color / mirror / Atom feed
From: DAN LI <li.dan@cn.fujitsu.com>
To: Eryu Guan <eguan@redhat.com>
Cc: LTP list <ltp-list@lists.sourceforge.net>
Subject: Re: [LTP] [PATCH 1/2]mount/mount03.c: cleanup
Date: Mon, 13 May 2013 18:37:09 +0800	[thread overview]
Message-ID: <5190C255.2090402@cn.fujitsu.com> (raw)
In-Reply-To: <20130513082625.GL2460@eguan-t400.nay.redhat.com>

On 05/13/2013 04:26 PM, Eryu Guan wrote:
> On Mon, May 13, 2013 at 10:41:39AM +0800, DAN LI wrote:
>>
>> 1. Remove useless comments
>>
>> 2. Revise code to follow ltp-code-style
>>
>> Signed-off-by: DAN LI <li.dan@cn.fujitsu.com>
>> ---
>>  testcases/kernel/syscalls/mount/mount03.c | 208 +++++++++++++-----------------
>>  1 file changed, 89 insertions(+), 119 deletions(-)
>>
>> diff --git a/testcases/kernel/syscalls/mount/mount03.c b/testcases/kernel/syscalls/mount/mount03.c
>> index 04570b9..ea4b0e9 100644
>> --- a/testcases/kernel/syscalls/mount/mount03.c
>> +++ b/testcases/kernel/syscalls/mount/mount03.c
>> @@ -14,10 +14,8 @@
>>   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>>   *
>>   */
>> -/**************************************************************************
>> - *
>> - *    TEST IDENTIFIER	: mount03
>> - *
>> +
>> +/*
>>   *    EXECUTED BY	: root / superuser
>>   *
>>   *    TEST TITLE	: Test for checking mount(2) flags
>> @@ -26,10 +24,6 @@
>>   *
>>   *    AUTHOR		: Nirmala Devi Dhanasekar <nirmala.devi@wipro.com>
>>   *
>> - *    SIGNALS
>> - * 	Uses SIGUSR1 to pause before test if option set.
>> - * 	(See the parse_opts(3) man page).
>> - *
>>   *    DESCRIPTION
>>   *	Check for basic mount(2) system call flags.
>>   *
>> @@ -42,13 +36,13 @@
>>   *	5) MS_REMOUNT - alter flags of a mounted FS.
>>   *	6) MS_NOSUID - ignore suid and sgid bits.
>>   *
>> - * 	Setup:
>> + *	Setup:
>>   *	  Setup signal handling.
>>   *	  Create a mount point.
>>   *	  Pause for SIGUSR1 if option specified.
>>   *
>> - * 	Test:
>> - *	 Loop if the proper options are given.
>> + *	Test:
>> + *	  Loop if the proper options are given.
>>   *	  Execute mount system call for each flag
>>   *	  Validate each flag setting. if validation fails
>>   *		Delete the mount point.
>> @@ -56,22 +50,10 @@
>>   *	  Delete the mount point.
>>   *	  Otherwise, Issue a PASS message.
>>   *
>> - * 	Cleanup:
>> - * 	  Print errno log and/or timing stats if options given
>> + *	Cleanup:
>> + *	  Print errno log and/or timing stats if options given
>>   *	  Delete the temporary directory(s)/file(s) created.
>>   *
>> - * USAGE:  <for command-line>
>> - *  mount03 [-T type] -D device [-e] [-i n] [-I x] [-p x] [-t]
>> - *			where,  -T type : specifies the type of filesystem to
>> - *					  be mounted. Default ext2.
>> - *				-D device : device to be mounted.
>> - *				-e   : Turn on errno logging.
>> - *				-i n : Execute test n times.
>> - *				-I x : Execute test for x seconds.
>> - *				-p   : Pause for SIGUSR1 before starting
>> - *				-P x : Pause for x seconds between iterations.
>> - *				-t   : Turn on syscall timing.
>> - *
>>   * RESTRICTIONS
>>   *	test must run with the -D option
>>   *	test doesn't support -c option to run it in parallel, as mount
>> @@ -102,30 +84,29 @@ static int setup_uid(void);
>>
>>  char *TCID = "mount03";
>>  int TST_TOTAL = 6;
>> -extern char **environ;		/* pointer to this processes env */
>>
>>  #define DEFAULT_FSTYPE	"ext2"
>>  #define TEMP_FILE	"temp_file"
>>  #define FILE_MODE	(S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
>> -#define DIR_MODE	(S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
>> +#define DIR_MODE	(S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|\
> 						       ^^^^ I'd like a space here, | \

Agreed.

>> +			 S_IXGRP|S_IROTH|S_IXOTH)
>>  #define SUID_MODE	(S_ISUID|S_IRUSR|S_IXUSR|S_IXGRP|S_IXOTH)
>>
>> -static char *Fstype;
>> +static char *fs_type;
>>
>>  static char mntpoint[20];
>>  static char *fstype;
>>  static char *device;
>> -static int Tflag = 0;
>> -static int Dflag = 0;
>> -
>> -static char write_buffer[BUFSIZ];	/* buffer used to write data to file */
>> -static char read_buffer[BUFSIZ];	/* buffer used to read data from file */
>> -static int fildes;		/* file descriptor for temporary file */
>> -static char *Cmd_buffer[3];	/* Buffer to hold command string */
>> -static char Path_name[PATH_MAX];	/* Buffer to hold command string */
>> -static char testhome_path[PATH_MAX];	/* Test home Path                */
>> -static char file[PATH_MAX];	/* Temporary file                */
>> -static char cmd[] = "cp";
>> +static int tflag;
>> +static int dflag;
>> +
>> +static char write_buffer[BUFSIZ];
>> +static char read_buffer[BUFSIZ];
>> +static int fildes;
> 
> move this up and put all int vars together?

Agreed.

>> +static char path_name[PATH_MAX];
>> +static char testhome_path[PATH_MAX];
>> +static char file[PATH_MAX];
>> +static char *cmd = "cp";
>>
>>  long rwflags[] = {
>>  	MS_RDONLY,
>> @@ -136,41 +117,41 @@ long rwflags[] = {
>>  	MS_NOSUID,
>>  };
>>
>> -static option_t options[] = {	/* options supported by mount03 test */
>> -	{"T:", &Tflag, &fstype},	/* -T type of filesystem        */
>> -	{"D:", &Dflag, &device},	/* -D device used for mounting  */
>> +static option_t options[] = {
>> +	{"T:", &tflag, &fstype},
>> +	{"D:", &dflag, &device},
>>  	{NULL, NULL, NULL}
>>  };
>>
>> -int main(int ac, char **av)
>> +int main(int argc, char *argv[])
>>  {
>>  	int lc, i;
>>  	char *msg;
>>
>> -	if ((msg = parse_opts(ac, av, options, &help)) != NULL)
>> +	msg = parse_opts(argc, argv, options, &help);
>> +	if (msg != NULL)
>>  		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
>>
>>  	/* Check for mandatory option of the testcase */
>> -	if (!Dflag) {
>> +	if (!dflag)
>>  		tst_brkm(TBROK, NULL,
>>  			 "you must specify the device used for mounting with -D "
>>  			 "option");
>> -	}
>>
>> -	if (Tflag) {
>> -		Fstype = (char *)malloc(strlen(fstype) + 1);
>> -		if (Fstype == NULL) {
>> +	if (tflag) {
>> +		fs_type = (char *)malloc(strlen(fstype) + 1);
>                           ^^^^^^^^ not sure if we really need a cast for malloc
> 

It's a watch point in C++, but for C, maybe better to cut the cast.

>> +		if (fs_type == NULL)
>>  			tst_brkm(TBROK | TERRNO, NULL, "malloc failed");
>> -		}
>> -		Fstype[strlen(fstype)] = '\0';
>> -		strncpy(Fstype, fstype, strlen(fstype));
>> +
>> +		fs_type[strlen(fstype)] = '\0';
>> +		strncpy(fs_type, fstype, strlen(fstype));
>>  	} else {
>> -		Fstype = (char *)malloc(strlen(DEFAULT_FSTYPE) + 1);
>> -		if (Fstype == NULL) {
>> +		fs_type = (char *)malloc(strlen(DEFAULT_FSTYPE) + 1);
>> +		if (fs_type == NULL)
>>  			tst_brkm(TBROK | TERRNO, NULL, "malloc failed");
>> -		}
>> -		strncpy(Fstype, DEFAULT_FSTYPE, strlen(DEFAULT_FSTYPE));
>> -		Fstype[strlen(DEFAULT_FSTYPE)] = '\0';
>> +
>> +		strncpy(fs_type, DEFAULT_FSTYPE, strlen(DEFAULT_FSTYPE));
>> +		fs_type[strlen(DEFAULT_FSTYPE)] = '\0';
>>  	}
>>
>>  	if (STD_COPIES != 1) {
>> @@ -189,7 +170,8 @@ int main(int ac, char **av)
>>  		for (i = 0; i < TST_TOTAL; ++i) {
>>
>>  			/* Call mount(2) */
>> -			TEST(mount(device, mntpoint, Fstype, rwflags[i], NULL));
>> +			TEST(mount(device, mntpoint, fs_type,
>> +						rwflags[i], NULL));
> indent like this?
>   			TEST(mount(device, mntpoint, fs_type, rwflags[i],
> 				   NULL));

Agreed.

>>
>>  			/* check return code */
>>  			if (TEST_RETURN != 0) {
>> @@ -198,22 +180,20 @@ int main(int ac, char **av)
>>  			}
>>
>>  			/* Validate the rwflag */
>> -			if (test_rwflag(i, lc) == 1) {
>> +			if (test_rwflag(i, lc) == 1)
>>  				tst_resm(TFAIL, "mount(2) failed while"
>>  					 " validating %ld", rwflags[i]);
>> -			} else {
>> +			else
>>  				tst_resm(TPASS, "mount(2) passed with "
>>  					 "rwflag = %ld", rwflags[i]);
>> -			}
>> +
>>  			TEST(umount(mntpoint));
>> -			if (TEST_RETURN != 0) {
>> +			if (TEST_RETURN != 0)
>>  				tst_brkm(TBROK | TTERRNO, cleanup,
>>  					 "umount(2) failed for %s", mntpoint);
>> -			}
>>  		}
>>  	}
>>
>> -	/* cleanup and exit */
>>  	cleanup();
>>
>>  	tst_exit();
>> @@ -234,8 +214,9 @@ int test_rwflag(int i, int cnt)
>>  	case 0:
>>  		/* Validate MS_RDONLY flag of mount call */
>>
>> -		snprintf(file, PATH_MAX, "%stmp", Path_name);
>> -		if ((fd = open(file, O_CREAT | O_RDWR, S_IRWXU)) == -1) {
>> +		snprintf(file, PATH_MAX, "%stmp", path_name);
>> +		fd = open(file, O_CREAT | O_RDWR, S_IRWXU);
>> +		if (fd == -1) {
>>  			if (errno == EROFS) {
>>  				return 0;
>>  			} else {
>> @@ -249,10 +230,11 @@ int test_rwflag(int i, int cnt)
>>  	case 1:
>>  		/* Validate MS_NODEV flag of mount call */
>>
>> -		snprintf(file, PATH_MAX, "%smynod_%d_%d", Path_name, getpid(),
>> +		snprintf(file, PATH_MAX, "%smynod_%d_%d", path_name, getpid(),
>>  			 cnt);
>>  		if (mknod(file, S_IFBLK | 0777, 0) == 0) {
>> -			if ((fd = open(file, O_RDWR, S_IRWXU)) == -1) {
>> +			fd = open(file, O_RDWR, S_IRWXU);
>> +			if (fd == -1) {
>>  				if (errno == EACCES) {
>>  					return 0;
>>  				} else {
>> @@ -271,8 +253,9 @@ int test_rwflag(int i, int cnt)
>>  	case 2:
>>  		/* Validate MS_NOEXEC flag of mount call */
>>
>> -		snprintf(file, PATH_MAX, "%stmp1", Path_name);
>> -		if ((fd = open(file, O_CREAT | O_RDWR, S_IRWXU)) == -1) {
>> +		snprintf(file, PATH_MAX, "%stmp1", path_name);
>> +		fd = open(file, O_CREAT | O_RDWR, S_IRWXU);
>> +		if (fd == -1) {
>>  			tst_resm(TWARN | TERRNO, "opening %s failed", file);
>>  		} else {
>>  			close(fd);
>> @@ -288,9 +271,9 @@ int test_rwflag(int i, int cnt)
>>  		strcpy(write_buffer, "abcdefghijklmnopqrstuvwxyz");
>>
>>  		/* Creat a temporary file under above directory */
>> -		snprintf(file, PATH_MAX, "%s%s", Path_name, TEMP_FILE);
>> -		if ((fildes = open(file, O_RDWR | O_CREAT, FILE_MODE))
>> -		    == -1) {
>> +		snprintf(file, PATH_MAX, "%s%s", path_name, TEMP_FILE);
>> +		fildes = open(file, O_RDWR | O_CREAT, FILE_MODE);
>> +		if (fildes == -1) {
>>  			tst_resm(TWARN | TERRNO,
>>  				 "open(%s, O_RDWR|O_CREAT, %#o) failed",
>>  				 file, FILE_MODE);
>> @@ -333,14 +316,14 @@ int test_rwflag(int i, int cnt)
>>  	case 4:
>>  		/* Validate MS_REMOUNT flag of mount call */
>>
>> -		TEST(mount(device, mntpoint, Fstype, MS_REMOUNT, NULL));
>> +		TEST(mount(device, mntpoint, fs_type, MS_REMOUNT, NULL));
>>  		if (TEST_RETURN != 0) {
>>  			tst_resm(TWARN | TTERRNO, "mount(2) failed to remount");
>>  			return 1;
>>  		} else {
>> -			snprintf(file, PATH_MAX, "%stmp2", Path_name);
>> -			if ((fd = open(file, O_CREAT | O_RDWR, S_IRWXU))
>> -			    == -1) {
>> +			snprintf(file, PATH_MAX, "%stmp2", path_name);
>> +			fd = open(file, O_CREAT | O_RDWR, S_IRWXU);
>> +			if (fd == -1) {
>>  				tst_resm(TWARN, "open(%s) on readonly "
>>  					 "filesystem passed", file);
>>  				return 1;
>> @@ -356,23 +339,23 @@ int test_rwflag(int i, int cnt)
>>  			tst_resm(TBROK | TERRNO, "setup_uid failed");
>>  			return 1;
>>  		}
>> -		switch (pid = fork()) {
>> +		pid = fork();
>> +		switch (pid) {
>>  		case -1:
>>  			tst_resm(TBROK | TERRNO, "fork failed");
>>  			return 1;
>>  		case 0:
>> -			snprintf(file, PATH_MAX, "%ssetuid_test", Path_name);
>> -			if (chmod(file, SUID_MODE) != 0) {
>> +			snprintf(file, PATH_MAX, "%ssetuid_test", path_name);
>> +			if (chmod(file, SUID_MODE) != 0)
>>  				tst_resm(TWARN, "chmod(%s, %#o) failed",
>>  					 file, SUID_MODE);
>> -			}
>>
>>  			ltpuser = getpwnam(nobody_uid);
>> -			if (setreuid(ltpuser->pw_uid, ltpuser->pw_uid) == -1) {
>> +			if (setreuid(ltpuser->pw_uid, ltpuser->pw_uid) == -1)
>>  				tst_resm(TWARN | TERRNO,
>>  					 "seteuid() failed to change euid to %d",
>>  					 ltpuser->pw_uid);
>> -			}
>> +
>>  			execlp(file, basename(file), NULL);
>>  			exit(1);
>>  		default:
>> @@ -395,24 +378,21 @@ int setup_uid()
>>  	int pid, status;
>>  	char command[PATH_MAX];
>>
>> -	switch (pid = fork()) {
>> +	pid = fork();
>> +	switch (pid) {
>>  	case -1:
>>  		tst_resm(TWARN | TERRNO, "fork failed");
>>  		return 1;
>>  	case 0:
>> -		Cmd_buffer[0] = cmd;
>> -		Cmd_buffer[1] = testhome_path;
>> -		Cmd_buffer[2] = Path_name;
>> -
>>  		/* Put command into string */
>> -		sprintf(command, "%s %s %s", cmd, testhome_path, Path_name);
>> +		sprintf(command, "%s %s %s", cmd, testhome_path, path_name);
>>
>>  		/* Run command to cp file to right spot */
>> -		if (system(command) == 0) {
>> +		if (system(command) == 0)
>>  			execlp(file, basename(file), NULL);
>> -		} else {
>> +		else
>>  			printf("call to %s failed\n", command);
>> -		}
>> +
>>  		exit(1);
>>  	default:
>>  		waitpid(pid, &status, 0);
>> @@ -428,17 +408,16 @@ int setup_uid()
>>  	}
>>  }
>>
>> -/* setup() - performs all ONE TIME setup for this test */
>>  void setup()
>>  {
>> -	char *test_home;	/* variable to hold TESTHOME env */
>> +	char *test_home;
>>  	struct stat setuid_test_stat;
>>
>>  	tst_sig(FORK, DEF_HANDLER, cleanup);
>>
>>  	/* Check whether we are root */
>>  	if (geteuid() != 0) {
>> -		free(Fstype);
>> +		free(fs_type);
>>  		tst_brkm(TBROK, NULL, "Test must be run as root");
>>  	}
>>
>> @@ -451,38 +430,37 @@ void setup()
>>  	/* Unique mount point */
>>  	(void)sprintf(mntpoint, "mnt_%d", getpid());
>>
>> -	if (mkdir(mntpoint, DIR_MODE)) {
>> +	if (mkdir(mntpoint, DIR_MODE))
>>  		tst_brkm(TBROK | TERRNO, cleanup, "mkdir(%s, %#o) failed",
>>  			 mntpoint, DIR_MODE);
>> -	}
>> +
>>  	/* Get the current working directory of the process */
>> -	if (getcwd(Path_name, sizeof(Path_name)) == NULL) {
>> +	if (getcwd(path_name, sizeof(path_name)) == NULL)
>>  		tst_brkm(TBROK, cleanup, "getcwd failed");
>> -	}
>> -	if (chmod(Path_name, DIR_MODE) != 0) {
>> +
>> +	if (chmod(path_name, DIR_MODE) != 0)
>>  		tst_brkm(TBROK, cleanup, "chmod(%s, %#o) failed",
>> -			 Path_name, DIR_MODE);
>> -	}
>> -	snprintf(file, PATH_MAX, "%ssetuid_test", Path_name);
>> +			 path_name, DIR_MODE);
>> +
>> +	snprintf(file, PATH_MAX, "%ssetuid_test", path_name);
>>  	if (stat(file, &setuid_test_stat) < 0) {
>>  		tst_brkm(TBROK, cleanup, "stat for setuid_test failed");
>>  	} else {
>>  		if ((setuid_test_stat.st_uid || setuid_test_stat.st_gid) &&
>> -		    chown(file, 0, 0) < 0) {
>> +		    chown(file, 0, 0) < 0)
>>  			tst_brkm(TBROK, cleanup,
>>  				 "chown for setuid_test failed");
>> -		}
>> +
>>  		if (setuid_test_stat.st_mode != SUID_MODE &&
>> -		    chmod(file, SUID_MODE) < 0) {
>> +		    chmod(file, SUID_MODE) < 0)
>>  			tst_brkm(TBROK, cleanup,
>>  				 "setuid for setuid_test failed");
>> -		}
>>  	}
>>
>>  	/*
>>  	 * under temporary directory
>>  	 */
>> -	snprintf(Path_name, PATH_MAX, "%s/%s/", Path_name, mntpoint);
>> +	snprintf(path_name, PATH_MAX, "%s/%s/", path_name, mntpoint);
>>
>>  	strcpy(testhome_path, test_home);
>>  	strcat(testhome_path, "/setuid_test");
>> @@ -491,18 +469,10 @@ void setup()
>>
>>  }
>>
>> -/*
>> - *cleanup() -  performs all ONE TIME cleanup for this test at
>> - *		completion or premature exit.
>> - */
>>  void cleanup()
>>  {
>> -	free(Fstype);
>> +	free(fs_type);
>>
>> -	/*
>> -	 * print timing stats if that option was specified.
>> -	 * print errno log if that option was specified.
>> -	 */
>>  	TEST_CLEANUP;
>>
>>  	tst_rmdir();
>> @@ -514,6 +484,6 @@ void cleanup()
>>  void help()
>>  {
>>  	printf("-T type	  : specifies the type of filesystem to be mounted."
>> -	       " Default ext2. \n");
>> -	printf("-D device : device used for mounting \n");
>> +	       "Default ext2.\n");
>                ^^ we need a space here otherwise the output will be:
> 	       "... to be mounted.Default ext2."
> 	                       ^^^^^ no space
> 

But it seems that checkpatch.pl do not agree it.
I'will check it.

Thanks for reviewing.
DAN LI

> Thanks for the cleanup!
> 
> Eryu Guan
>> +	printf("-D device : device used for mounting\n");
>>  }
>> -- 
>> 1.8.3
>>
>> ------------------------------------------------------------------------------
>> Learn Graph Databases - Download FREE O'Reilly Book
>> "Graph Databases" is the definitive new guide to graph databases and 
>> their applications. This 200-page book is written by three acclaimed 
>> leaders in the field. The early access version is available now. 
>> Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
>> _______________________________________________
>> Ltp-list mailing list
>> Ltp-list@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/ltp-list
> 



------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

      reply	other threads:[~2013-05-13 10:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-13  2:41 [LTP] [PATCH 1/2]mount/mount03.c: cleanup DAN LI
2013-05-13  3:12 ` [LTP] [PATCH 2/2]mount/mount03.c: fix several issues DAN LI
2013-05-13  8:41   ` Eryu Guan
2013-05-13 10:58     ` DAN LI
2013-05-13  8:26 ` [LTP] [PATCH 1/2]mount/mount03.c: cleanup Eryu Guan
2013-05-13 10:37   ` DAN LI [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5190C255.2090402@cn.fujitsu.com \
    --to=li.dan@cn.fujitsu.com \
    --cc=eguan@redhat.com \
    --cc=ltp-list@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.