The binary file of msgctl is installed in /opt/ltp/lib/. When execute msgctl, "pan(23126): execvp of 'msgctl01' (tag msgctl01) failed. errno:2 No such file or directory" will be outputed.
Signed-off-by: Peng Haitao <[email protected]> --- testcases/kernel/syscalls/ipc/Makefile | 2 +- testcases/kernel/syscalls/ipc/lib/Makefile | 2 +- testcases/kernel/syscalls/ipc/lib/libmsgctl.c | 147 +++++++++++++++++++++ testcases/kernel/syscalls/ipc/lib/libmsgctl.h | 39 ++++++ testcases/kernel/syscalls/ipc/msgctl/Makefile | 13 +-- testcases/kernel/syscalls/ipc/msgctl/libmsgctl.c | 148 ---------------------- testcases/kernel/syscalls/ipc/msgctl/libmsgctl.h | 39 ------ testcases/kernel/syscalls/ipc/msgctl/msgctl08.c | 2 +- testcases/kernel/syscalls/ipc/msgctl/msgctl09.c | 2 +- testcases/kernel/syscalls/ipc/msgctl/msgctl10.c | 2 +- testcases/kernel/syscalls/ipc/msgctl/msgctl11.c | 2 +- 11 files changed, 194 insertions(+), 204 deletions(-) create mode 100644 testcases/kernel/syscalls/ipc/lib/libmsgctl.c create mode 100644 testcases/kernel/syscalls/ipc/lib/libmsgctl.h delete mode 100644 testcases/kernel/syscalls/ipc/msgctl/libmsgctl.c delete mode 100644 testcases/kernel/syscalls/ipc/msgctl/libmsgctl.h diff --git a/testcases/kernel/syscalls/ipc/Makefile b/testcases/kernel/syscalls/ipc/Makefile index 69c6e8c..42492db 100644 --- a/testcases/kernel/syscalls/ipc/Makefile +++ b/testcases/kernel/syscalls/ipc/Makefile @@ -22,7 +22,7 @@ include $(top_srcdir)/include/mk/env_pre.mk LIBDIR := lib FILTER_OUT_DIRS := $(LIBDIR) -LIB := $(LIBDIR)/libipc.a +LIB := $(LIBDIR)/libipc.a $(LIBDIR)/libmsgctl.a $(LIBDIR): mkdir -p "$@" diff --git a/testcases/kernel/syscalls/ipc/lib/Makefile b/testcases/kernel/syscalls/ipc/lib/Makefile index 9de2274..0333d48 100644 --- a/testcases/kernel/syscalls/ipc/lib/Makefile +++ b/testcases/kernel/syscalls/ipc/lib/Makefile @@ -20,6 +20,6 @@ top_srcdir ?= ../../../../.. include $(top_srcdir)/include/mk/env_pre.mk -LIB := libipc.a +LIB := libipc.a libmsgctl.a include $(top_srcdir)/include/mk/lib.mk diff --git a/testcases/kernel/syscalls/ipc/lib/libmsgctl.c b/testcases/kernel/syscalls/ipc/lib/libmsgctl.c new file mode 100644 index 0000000..ae459d4 --- /dev/null +++ b/testcases/kernel/syscalls/ipc/lib/libmsgctl.c @@ -0,0 +1,147 @@ +/* + * Copyright (c) International Business Machines Corp., 2002 + * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved. + * + * 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 would 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 the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/msg.h> +#include "libmsgctl.h" + +int doreader(long key, int tid, long type, int child, int nreps) +{ + int i, size; + int id; + struct mbuffer buffer; + + id = msgget(key, 0); + if (id < 0) { + printf("msgget() error in the reader of child group %d: %s\n", + child, strerror(errno)); + + return FAIL; + } + if (id != tid) { + printf("Message queue mismatch in the reader of child group %d for message queue id %d\n", + child, id); + + return FAIL; + } + for (i = 0; i < nreps; i++) { + memset(&buffer, 0, sizeof(buffer)); + + size = msgrcv(id, &buffer, 100, type, 0); + if (size < 0) { + printf("msgrcv() error in child %d, read # = %d: %s\n", + child, (i + 1), strerror(errno)); + + return FAIL; + } + if (buffer.type != type) { + printf("Type mismatch in child %d, read #d = %d: ", + child, (i + 1)); + printf("for message got %ld, expected - %ld\n", + buffer.type, type); + + return FAIL; + } + if (buffer.data.len + 1 != size) { + printf("Size mismatch in child %d, read # = %d: ", + child, (i + 1)); + printf("for message got %d, expected - %d\n", + buffer.data.len + 1, size); + + return FAIL; + } + if (verify(buffer.data.pbytes, (key % 255), size - 1, child)) { + printf("Verify failed in child %d read # = %d, key = %lx\n", + child, (i + 1), key); + + return FAIL; + } + key++; + } + return PASS; +} + +int dowriter(long key, int tid, long type, int child, int nreps) +{ + int i, size; + int id; + struct mbuffer buffer; + + id = msgget(key, 0); + if (id < 0) { + printf("msgget() error in the writer of child group %d: %s\n", + child, strerror(errno)); + + return FAIL; + } + if (id != tid) { + printf("Message queue mismatch in the reader of child group %d for message queue id %d\n", + child, id); + + return FAIL; + } + + for (i = 0; i < nreps; i++) { + memset(&buffer, 0, sizeof(buffer)); + + do { + size = (lrand48() % 99); + } while (size == 0); + fill_buffer(buffer.data.pbytes, (key % 255), size); + buffer.data.len = size; + buffer.type = type; + if (msgsnd(id, &buffer, size + 1, 0) < 0) { + printf("msgsnd() error in child %d, write # = %d, key = %lx: %s\n", + child, nreps, key, strerror(errno)); + + return FAIL; + } + key++; + } + return PASS; +} + +int fill_buffer(char *buf, char val, int size) +{ + int i; + + for (i = 0; i < size; i++) + buf[i] = val; + return 0; +} + +/* Check a buffer for correct values */ +int verify(char *buf, char val, int size, int child) +{ + while (size-- > 0) { + if (*buf++ != val) { + printf("Verify error in child %d, *buf = %x, val = %x, size = %d\n", + child, *buf, val, size); + + return FAIL; + } + } + return PASS; +} diff --git a/testcases/kernel/syscalls/ipc/lib/libmsgctl.h b/testcases/kernel/syscalls/ipc/lib/libmsgctl.h new file mode 100644 index 0000000..e1afeab --- /dev/null +++ b/testcases/kernel/syscalls/ipc/lib/libmsgctl.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) International Business Machines Corp., 2002 + * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved. + * + * 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 would 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 the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __LIBMSGCTL_H__ +#define __LIBMSGCTL_H__ + +#define FAIL 1 +#define PASS 0 + +struct mbuffer { + long type; + struct { + char len; + char pbytes[99]; + } data; +}; + +int doreader(long key, int tid, long type, int child, int nreps); +int dowriter(long key, int tid, long type, int child, int nreps); +int fill_buffer(char *buf, char val, int size); +int verify(char *buf, char val, int size, int child); + +#endif /*__LIBMSGCTL_H__ */ diff --git a/testcases/kernel/syscalls/ipc/msgctl/Makefile b/testcases/kernel/syscalls/ipc/msgctl/Makefile index aedfda6..e2396e9 100644 --- a/testcases/kernel/syscalls/ipc/msgctl/Makefile +++ b/testcases/kernel/syscalls/ipc/msgctl/Makefile @@ -20,19 +20,10 @@ top_srcdir ?= ../../../../.. include $(top_srcdir)/include/mk/testcases.mk -LIBSRCS := libmsgctl.c -INTERNAL_LIB := libmsgctl.a - -LDFLAGS += -L$(abs_builddir) +LIBMSGCTL := $(LIBDIR)/libmsgctl.a LDLIBS += -lmsgctl -MAKE_TARGETS := $(patsubst %.c,%,$(wildcard msgctl??.c)) -MAKE_TARGET_OBJS := $(addsuffix .o,$(MAKE_TARGETS)) - -$(MAKE_TARGET_OBJS): $(INTERNAL_LIB) - -.INTERMEDIATE: $(MAKE_TARGET_OBJS) +MAKE_DEPS := $(LIBMSGCTL) include $(abs_srcdir)/../Makefile.inc -include $(top_srcdir)/include/mk/lib.mk include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/syscalls/ipc/msgctl/libmsgctl.c b/testcases/kernel/syscalls/ipc/msgctl/libmsgctl.c deleted file mode 100644 index fa77b56..0000000 --- a/testcases/kernel/syscalls/ipc/msgctl/libmsgctl.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2002 - * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved. - * - * 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 would 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 the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/ipc.h> -#include <sys/msg.h> -#include "libmsgctl.h" - -int doreader(long key, int tid, long type, int child, int nreps) -{ - int i, size; - int id; - struct mbuffer buffer; - - id = msgget(key, 0); - if (id < 0) { - printf("msgget() error in the reader of child group %d: %s\n", - child, strerror(errno)); - - return FAIL; - } - if (id != tid) { - printf("Message queue mismatch in the reader of child group %d for message queue id %d\n", - child, id); - - return FAIL; - } - for (i = 0; i < nreps; i++) { - memset(&buffer, 0, sizeof(buffer)); - - size = msgrcv(id, &buffer, 100, type, 0); - if (size < 0) { - printf("msgrcv() error in child %d, read # = %d: %s\n", - child, (i + 1), strerror(errno)); - - return FAIL; - } - if (buffer.type != type) { - printf("Type mismatch in child %d, read #d = %d: ", - child, (i + 1)); - printf("for message got %ld, expected - %ld\n", - buffer.type, type); - - return FAIL; - } - if (buffer.data.len + 1 != size) { - printf("Size mismatch in child %d, read # = %d: ", - child, (i + 1)); - printf("for message got %d, expected - %d\n", - buffer.data.len + 1, size); - - return FAIL; - } - if (verify(buffer.data.pbytes, (key % 255), size - 1, child)) { - printf("Verify failed in child %d read # = %d, key = %lx\n", - child, (i + 1), key); - - return FAIL; - } - key++; - } - return PASS; -} - -int dowriter(long key, int tid, long type, int child, int nreps) -{ - int i, size; - int id; - struct mbuffer buffer; - - id = msgget(key, 0); - if (id < 0) { - printf("msgget() error in the writer of child group %d: %s\n", - child, strerror(errno)); - - return FAIL; - } - if (id != tid) { - printf("Message queue mismatch in the reader of child group %d for message queue id %d\n", - child, id); - - return FAIL; - } - - for (i = 0; i < nreps; i++) { - memset(&buffer, 0, sizeof(buffer)); - - do { - size = (lrand48() % 99); - } while (size == 0); - fill_buffer(buffer.data.pbytes, (key % 255), size); - buffer.data.len = size; - buffer.type = type; - if (msgsnd(id, &buffer, size + 1, 0) < 0) { - printf("msgsnd() error in child %d, write # = %d, key = %lx: %s\n", - child, nreps, key, strerror(errno)); - - return FAIL; - } - key++; - } - return PASS; -} - -int fill_buffer(char *buf, char val, int size) -{ - int i; - - for (i = 0; i < size; i++) - buf[i] = val; - return 0; -} - -/* Check a buffer for correct values */ -int verify(char *buf, char val, int size, int child) -{ - while (size-- > 0) { - if (*buf++ != val) { - printf("Verify error in child %d, *buf = %x, val = %x, size = %d\n", - child, *buf, val, size); - - return FAIL; - } - } - return PASS; -} - diff --git a/testcases/kernel/syscalls/ipc/msgctl/libmsgctl.h b/testcases/kernel/syscalls/ipc/msgctl/libmsgctl.h deleted file mode 100644 index e1afeab..0000000 --- a/testcases/kernel/syscalls/ipc/msgctl/libmsgctl.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2002 - * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved. - * - * 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 would 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 the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __LIBMSGCTL_H__ -#define __LIBMSGCTL_H__ - -#define FAIL 1 -#define PASS 0 - -struct mbuffer { - long type; - struct { - char len; - char pbytes[99]; - } data; -}; - -int doreader(long key, int tid, long type, int child, int nreps); -int dowriter(long key, int tid, long type, int child, int nreps); -int fill_buffer(char *buf, char val, int size); -int verify(char *buf, char val, int size, int child); - -#endif /*__LIBMSGCTL_H__ */ diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c index 0999059..2d96d8a 100644 --- a/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c +++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c @@ -40,7 +40,7 @@ #include "test.h" #include "usctest.h" #include "ipcmsg.h" -#include "libmsgctl.h" +#include "../lib/libmsgctl.h" char *TCID = "msgctl08"; int TST_TOTAL = 1; diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c index c019226..a41ae88 100644 --- a/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c +++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c @@ -38,7 +38,7 @@ #include "test.h" #include "usctest.h" #include "ipcmsg.h" -#include "libmsgctl.h" +#include "../lib/libmsgctl.h" char *TCID = "msgctl09"; int TST_TOTAL = 1; diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c index 860419f..cfb0ef3 100644 --- a/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c +++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c @@ -41,7 +41,7 @@ #include "test.h" #include "usctest.h" #include "ipcmsg.h" -#include "libmsgctl.h" +#include "../lib/libmsgctl.h" char *TCID = "msgctl10"; int TST_TOTAL = 1; diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c index 9b21df8..57f4ae0 100644 --- a/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c +++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c @@ -39,7 +39,7 @@ #include "test.h" #include "usctest.h" #include "ipcmsg.h" -#include "libmsgctl.h" +#include "../lib/libmsgctl.h" #include "system_specific_process_info.h" char *TCID = "msgctl11"; -- 1.7.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=84349351&iu=/4140/ostg.clktrk _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
