[LTP] [RESEND] ipc/semget05: Convert into new api

Yang Xu (Fujitsu) xuyang2018.jy@fujitsu.com
Fri Apr 14 08:47:32 CEST 2023


Hi LI

In fact, this patch still can not be merged after resend.

I search Content-Transfer-Encoding in the following url:

https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html

Content-Transfer-Encoding: 7 bit means that the data is all represented 
as short lines of US-ASCII data

Content-Transfer-Encoding: 8 bit  means that the lines are short, but 
there may be non-ASCII characters (octets with the high-order bit set).


I seen these from the above url
"
As of the publication of this document, there are no standardized 
Internet transports for which it is legitimate to include unencoded 
8-bit or binary data in mail bodies. Thus there are no circumstances in 
which the "8bit" or "binary" Content-Transfer-Encoding is actually legal 
on the Internet. However, in the event that 8-bit or binary mail 
transport becomes a reality in Internet mail, or when this document is 
used in conjunction with any other 8-bit or binary-capable transport 
mechanism, 8-bit or binary bodies should be labeled as such using this 
mechanism."


I guess maybe I merged these 3/4 4/4 patch with your reviewed-by by 
myself? So we can avoid this problem. What do you think about it?

Best Regards
Yang Xu
> Use the same logic as shmget03 and msget03 to trigger ENOSPC error.
> 
> Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
> ---
>   testcases/kernel/syscalls/ipc/semget/Makefile |   5 +-
>   .../kernel/syscalls/ipc/semget/semget05.c     | 187 ++++++------------
>   2 files changed, 59 insertions(+), 133 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/ipc/semget/Makefile b/testcases/kernel/syscalls/ipc/semget/Makefile
> index 2f98c36ca..b1201281d 100644
> --- a/testcases/kernel/syscalls/ipc/semget/Makefile
> +++ b/testcases/kernel/syscalls/ipc/semget/Makefile
> @@ -3,11 +3,10 @@
>   
>   top_srcdir              ?= ../../../../..
>   
> -LTPLIBS = ltpipc ltpnewipc
> +LTPLIBS = ltpnewipc
>   
>   include $(top_srcdir)/include/mk/testcases.mk
>   
> -semget01 semget02: LTPLDLIBS = -lltpnewipc
> -semget05: LTPLDLIBS = -lltpipc
> +LTPLDLIBS = -lltpnewipc
>   
>   include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/kernel/syscalls/ipc/semget/semget05.c b/testcases/kernel/syscalls/ipc/semget/semget05.c
> index f801cb8ed..38b0fad3c 100644
> --- a/testcases/kernel/syscalls/ipc/semget/semget05.c
> +++ b/testcases/kernel/syscalls/ipc/semget/semget05.c
> @@ -1,152 +1,79 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
>   /*
> - *
> - *   Copyright (c) International Business Machines  Corp., 2001
> - *
> - *   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
> - *   the Free Software Foundation; either version 2 of the License, or
> - *   (at your option) any later version.
> - *
> - *   This program is distributed in the hope that it will be useful,
> - *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
> - *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
> - *   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
> + * Copyright (c) International Business Machines Corp., 2001
>    */
>   
> -/*
> - * NAME
> - *	semget05.c
> +/*\
> + * [Description]
>    *
> - * DESCRIPTION
> - *	semget05 - test for ENOSPC error
> + * Test for ENOSPC error.
>    *
> - * ALGORITHM
> - *	create semaphore sets in a loop until the system limit is reached
> - *	loop if that option was specified
> - *	attempt to create yet another semaphore set
> - *	check the errno value
> - *	  issue a PASS message if we get ENOSPC
> - *	otherwise, the tests fails
> - *	  issue a FAIL message
> - *	call cleanup
> - *
> - * USAGE:  <for command-line>
> - * HISTORY
> - *	03/2001 - Written by Wayne Boyer
> - *      07/2006 - Changes By Michael Reed
> - *                - Changed the value of MAXIDS for the specific machine by reading
> - *                  the system limit for SEMMNI - The maximum number of sempahore sets
> - *      03/2008 - Matthieu Fertr�  (mfertre@irisa.fr)
> - *                - Fix concurrency issue. Create private semaphores to
> - *                  avoid conflict with concurrent processes.
> - *
> - * RESTRICTIONS
> - *	none
> + * ENOSPC - a semaphore set exceed the maximum number of semaphore sets(SEMMNI)
>    */
>   
> -#include "ipcsem.h"
> -
> -char *TCID = "semget05";
> -int TST_TOTAL = 1;
> -
> -/*
> - * The MAXIDS value is somewhat arbitrary and may need to be increased
> - * depending on the system being tested.
> - */
> -
> -int MAXIDS = 2048;
> -
> -int *sem_id_arr = NULL;
> -int num_sems = 0;		/* count the semaphores created */
> -
> -int main(int ac, char **av)
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <unistd.h>
> +#include <sys/types.h>
> +#include <sys/ipc.h>
> +#include "lapi/sem.h"
> +#include "tst_test.h"
> +#include "libnewipc.h"
> +#include "tst_safe_sysv_ipc.h"
> +
> +static int *sem_id_arr;
> +static int maxsems, array_cnt, used_cnt;
> +static key_t semkey;
> +
> +static void verify_semget(void)
>   {
> -	int lc;
> -	FILE *fp;
> -
> -	tst_parse_opts(ac, av, NULL, NULL);
> -
> -	/* Set the MAXIDS for the specific machine by reading the system limit
> -	 * for SEMMNI - The maximum number of sempahore sets
> -	 */
> -	fp = fopen("/proc/sys/kernel/sem", "r");
> -	if (fp != NULL) {
> -		int getmaxid;
> -		if (fscanf(fp, "%*d %*d %*d %d", &getmaxid) == 1)
> -			MAXIDS = getmaxid + 1;
> -		fclose(fp);
> -	}
> -
> -	sem_id_arr = malloc(sizeof(int) * MAXIDS);
> -	if (sem_id_arr == NULL)
> -		tst_brkm(TBROK, cleanup, "malloc failed");
> -
> -	setup();
> -
> -	for (lc = 0; TEST_LOOPING(lc); lc++) {
> -		tst_count = 0;
> -
> -
> -		TEST(semget(IPC_PRIVATE, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA));
> -		if (TEST_RETURN != -1) {
> -			tst_resm(TFAIL, "call succeeded when error expected");
> -			continue;
> -		}
> -
> -		switch (TEST_ERRNO) {
> -		case ENOSPC:
> -			tst_resm(TPASS, "expected failure - errno "
> -				 "= %d : %s", TEST_ERRNO, strerror(TEST_ERRNO));
> -			break;
> -		default:
> -			tst_resm(TFAIL, "unexpected error - %d : %s",
> -				 TEST_ERRNO, strerror(TEST_ERRNO));
> -			break;
> -		}
> -	}
> -
> -	cleanup();
> -
> -	tst_exit();
> +	TST_EXP_FAIL2(semget(semkey + maxsems, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA),
> +		ENOSPC, "semget(%i, %i, %i)", semkey + maxsems, PSEMS,
> +		IPC_CREAT | IPC_EXCL | SEM_RA);
>   }
>   
> -void setup(void)
> +static void setup(void)
>   {
> -	int sem_q;
> -
> -	tst_sig(NOFORK, DEF_HANDLER, cleanup);
> +	int res, num;
>   
> -	TEST_PAUSE;
> +	semkey = GETIPCKEY();
> +	used_cnt = GET_USED_ARRAYS();
> +	tst_res(TINFO, "Current environment %d semaphore arrays are already in use",
> +		used_cnt);
> +	SAFE_FILE_SCANF("/proc/sys/kernel/sem", "%*d %*d %*d %d", &maxsems);
>   
> -	tst_tmpdir();
> -
> -	while ((sem_q = semget(IPC_PRIVATE, PSEMS, IPC_CREAT | IPC_EXCL)) != -1) {
> -		sem_id_arr[num_sems++] = sem_q;
> -		if (num_sems == MAXIDS) {
> -			tst_brkm(TBROK, cleanup, "The maximum number of "
> -				 "semaphore ID's has been\n\t reached.  Please "
> -				 "increase the MAXIDS value in the test.");
> -		}
> -	}
> +	sem_id_arr = SAFE_MALLOC((maxsems - used_cnt) * sizeof(int));
> +	for (num = 0; num < maxsems - used_cnt; num++) {
> +		res = semget(semkey + num, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA);
> +		if (res == -1)
> +			tst_brk(TBROK | TERRNO, "semget failed unexpectedly");
>   
> -	if (errno != ENOSPC) {
> -		tst_brkm(TBROK, cleanup, "Didn't get ENOSPC in test setup"
> -			 " - errno = %d : %s", errno, strerror(errno));
> +		sem_id_arr[array_cnt++] = res;
>   	}
> +	tst_res(TINFO, "The maximum number of semaphore arrays (%d) has been reached",
> +		maxsems);
>   }
>   
> -void cleanup(void)
> +static void cleanup(void)
>   {
> -	int i;
> +	int num;
>   
> -	for (i = 0; i < num_sems; i++) {
> -		rm_sema(sem_id_arr[i]);
> -	}
> +	if (!sem_id_arr)
> +		return;
> +
> +	for (num = 0; num < array_cnt; num++)
> +		SAFE_SEMCTL(sem_id_arr[num], PSEMS, IPC_RMID);
>   
>   	free(sem_id_arr);
> -	tst_rmdir();
>   }
> +
> +static struct tst_test test = {
> +	.needs_tmpdir = 1,
> +	.setup = setup,
> +	.cleanup = cleanup,
> +	.test_all = verify_semget,
> +	.save_restore = (const struct tst_path_val[]){
> +		{"/proc/sys/kernel/sem", NULL, TST_SR_TCONF},
> +		{}
> +	}
> +};


More information about the ltp mailing list