* Add "safe_macros.h" and use SAFE_XXX().
* Some cleanup.

Signed-off-by: Zuo Faqi <[email protected]>
---
 .../kernel/syscalls/getpeername/getpeername01.c    | 236 +++++++++------------
 1 file changed, 99 insertions(+), 137 deletions(-)

diff --git a/testcases/kernel/syscalls/getpeername/getpeername01.c 
b/testcases/kernel/syscalls/getpeername/getpeername01.c
index a30cd08..7aa72cb 100644
--- a/testcases/kernel/syscalls/getpeername/getpeername01.c
+++ b/testcases/kernel/syscalls/getpeername/getpeername01.c
@@ -1,6 +1,7 @@
 /*
  *
  *   Copyright (c) International Business Machines  Corp., 2001
+ *   07/2001 Ported by Wayne Boyer
  *
  *   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
@@ -13,214 +14,175 @@
  *   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
  */
 
 /*
- * Test Name: getpeername01
- *
- * Test Description:
  *  Verify that getpeername() returns the proper errno for various failure 
cases
- *
- * Usage:  <for command-line>
- *  getpeername01 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- *     where,  -c n : Run n copies concurrently.
- *             -e   : Turn on errno logging.
- *            -i n : Execute test n times.
- *            -I x : Execute test for x seconds.
- *            -P x : Pause for x seconds between iterations.
- *            -t   : Turn on syscall timing.
- *
- * HISTORY
- *     07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- *  None.
- *
  */
 
 #include <stdio.h>
 #include <unistd.h>
 #include <errno.h>
 #include <fcntl.h>
-
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/signal.h>
 #include <sys/ioctl.h>
-
 #include <netinet/in.h>
 
 #include "test.h"
 #include "usctest.h"
-
-char *TCID = "getpeername01";
-int testno;
-
-int s, s2;                     /* socket descriptors */
-struct sockaddr_in sin0, fsin1;
-socklen_t sinlen;
-
-void setup(void), setup0(void), setup1(void), setup2(void),
-cleanup(void), cleanup0(void), cleanup1(void), cleanup2(void);
-
-struct test_case_t {           /* test case structure */
-       int domain;             /* PF_INET, PF_UNIX, ... */
-       int type;               /* SOCK_STREAM, SOCK_DGRAM ... */
-       int proto;              /* protocol number (usually 0 = default) */
-       struct sockaddr *sockaddr;      /* socket address buffer */
-       socklen_t *salen;       /* getpeername's 3rd argument */
-       int retval;             /* syscall return value */
-       int experrno;           /* expected errno */
-       void (*setup) (void);
-       void (*cleanup) (void);
-       char *desc;
-} tdat[] = {
-       {
-       PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1,
-                   &sinlen, -1, EBADF, setup0, cleanup0,
-                   "bad file descriptor"}, {
-       PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1,
-                   &sinlen, -1, ENOTSOCK, setup0, cleanup0,
-                   "bad file descriptor"}, {
-       PF_INET, SOCK_STREAM, 0, (struct sockaddr *)&fsin1,
-                   &sinlen, -1, ENOTCONN, setup1, cleanup1, "invalid salen"},
+#include "safe_macros.h"
+
+static struct sockaddr_in server_addr;
+static struct sockaddr_in fsin1;
+static socklen_t sinlen;
+static int sv[2];
+
+static void setup(void);
+static void setup2(int);
+static void setup3(int);
+static void setup4(int);
+static void cleanup(void);
+static void cleanup2(int);
+static void cleanup4(int);
+
+struct test_case_t {
+       int sockfd;
+       struct sockaddr *sockaddr;
+       socklen_t *addrlen;
+       int expretval;
+       int experrno;
+       void (*setup) (int);
+       void (*cleanup) (int);
+       char *name;
+} test_cases[] = {
+       {-1, (struct sockaddr *)&fsin1, &sinlen, -1, EBADF, NULL, NULL,
+        "EBADF"},
+       {-1, (struct sockaddr *)&fsin1, &sinlen, -1, ENOTSOCK, setup2, cleanup2,
+        "ENOTSOCK"},
+       {-1, (struct sockaddr *)&fsin1, &sinlen, -1, ENOTCONN, setup3, cleanup2,
+        "ENOTCONN"},
 #ifndef UCLINUX
-           /* Skip since uClinux does not implement memory protection */
-       {
-       PF_UNIX, SOCK_STREAM, 0, (struct sockaddr *)0,
-                   &sinlen, -1, EFAULT, setup2, cleanup1,
-                   "invalid socket buffer"}, {
-       PF_UNIX, SOCK_STREAM, 0, (struct sockaddr *)&fsin1,
-                   (socklen_t *) 0, -1, EFAULT, setup2, cleanup1,
-                   "invalid aligned salen"}, {
-       PF_UNIX, SOCK_STREAM, 0, (struct sockaddr *)&fsin1,
-                   (socklen_t *) 1, -1, EFAULT, setup2, cleanup1,
-                   "invalid unaligned salen"},
+       {-1, (struct sockaddr *)-1, &sinlen, -1, EFAULT, setup4, cleanup4,
+        "EFAULT"},
+       {-1, (struct sockaddr *)&fsin1, (socklen_t *)0, -1, EFAULT, setup4,
+        cleanup4, "EFAULT"},
+       {-1, (struct sockaddr *)&fsin1, (socklen_t *)1, -1, EFAULT, setup4,
+        cleanup4, "EFAULT"},
 #endif
 };
 
-int TST_TOTAL = sizeof(tdat) / sizeof(tdat[0]);
-
-int exp_enos[] = { EBADF, ENOTSOCK, ENOTCONN, EFAULT, 0 };
+char *TCID = "getpeername01";
+int TST_TOTAL = ARRAY_SIZE(test_cases);
+static int exp_enos[] = { EBADF, ENOTSOCK, ENOTCONN, EFAULT, 0 };
 
 int main(int argc, char *argv[])
 {
        int lc;
        char *msg;
+       int i;
 
        msg = parse_opts(argc, argv, NULL, NULL);
-       if (msg != NULL) {
+       if (msg != NULL)
                tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-               tst_exit();
-       }
 
        setup();
 
        TEST_EXP_ENOS(exp_enos);
 
        for (lc = 0; TEST_LOOPING(lc); ++lc) {
+
                tst_count = 0;
-               for (testno = 0; testno < TST_TOTAL; ++testno) {
-                       tdat[testno].setup();
 
-                       TEST(getpeername(s, tdat[testno].sockaddr,
-                                        tdat[testno].salen));
-                       if (TEST_RETURN > 0) {
-                               TEST_RETURN = 0;
-                       } else {
-                               TEST_ERROR_LOG(TEST_ERRNO);
-                       }
-                       if (TEST_RETURN != tdat[testno].retval ||
-                           (TEST_RETURN < 0 &&
-                            TEST_ERRNO != tdat[testno].experrno)) {
-                               tst_resm(TFAIL, "%s ; returned"
-                                        " %ld (expected %d), errno %d 
(expected"
-                                        " %d)", tdat[testno].desc,
-                                        TEST_RETURN, tdat[testno].retval,
-                                        TEST_ERRNO, tdat[testno].experrno);
+               for (i = 0; i < TST_TOTAL; ++i) {
+
+                       if (test_cases[i].setup != NULL)
+                               test_cases[i].setup(i);
+
+                       TEST(getpeername(test_cases[i].sockfd,
+                                        test_cases[i].sockaddr,
+                                        test_cases[i].addrlen));
+
+                       TEST_ERROR_LOG(TEST_ERRNO);
+
+                       if (TEST_RETURN == test_cases[i].expretval &&
+                           TEST_ERRNO == test_cases[i].experrno) {
+                               tst_resm(TPASS,
+                                        "test getpeername() %s successful",
+                                        test_cases[i].name);
                        } else {
-                               tst_resm(TPASS, "%s successful",
-                                        tdat[testno].desc);
+                               tst_resm(TFAIL,
+                                        "test getpeername() %s failed; "
+                                        "returned %ld (expected %d), errno %d "
+                                        "(expected %d)", test_cases[i].name,
+                                        TEST_RETURN, test_cases[i].expretval,
+                                        TEST_ERRNO, test_cases[i].experrno);
                        }
-                       tdat[testno].cleanup();
+
+                       if (test_cases[i].cleanup != NULL)
+                               test_cases[i].cleanup(i);
                }
        }
+
        cleanup();
 
        tst_exit();
 }
 
-void setup(void)
+static void setup(void)
 {
        TEST_PAUSE;
 
-       /* initialize local sockaddr */
-       sin0.sin_family = AF_INET;
-       sin0.sin_port = 0;
-       sin0.sin_addr.s_addr = INADDR_ANY;
-}
-
-void cleanup(void)
-{
-       TEST_CLEANUP;
+       server_addr.sin_family = AF_INET;
+       server_addr.sin_port = 0;
+       server_addr.sin_addr.s_addr = INADDR_ANY;
 
+       sinlen = sizeof(fsin1);
 }
 
-void setup0(void)
+static void cleanup(void)
 {
-       if (tdat[testno].experrno == EBADF)
-               s = 400;        /* anything not an open file */
-       else if ((s = open("/dev/null", O_WRONLY)) == -1)
-               tst_brkm(TBROK | TERRNO, cleanup, "open(/dev/null) failed");
-
+       TEST_CLEANUP;
 }
 
-void cleanup0(void)
+static void setup2(int i)
 {
-       s = -1;
+       test_cases[i].sockfd = SAFE_OPEN(cleanup, "/dev/null", O_WRONLY, 0666);
 }
 
-void setup1(void)
+static void setup3(int i)
 {
-       s = socket(tdat[testno].domain, tdat[testno].type, tdat[testno].proto);
-       if (s < 0) {
+       test_cases[i].sockfd = socket(PF_INET, SOCK_STREAM, 0);
+       if (test_cases[i].sockfd < 0) {
                tst_brkm(TBROK | TERRNO, cleanup,
-                        "socket setup failed for getpeername " " test %d",
-                        testno);
+                        "socket setup failed for getpeername test %d", i);
        }
-       if (bind(s, (struct sockaddr *)&sin0, sizeof(sin0)) < 0) {
+       if (bind(test_cases[i].sockfd, (struct sockaddr *)&server_addr,
+                sizeof(server_addr)) < 0) {
                tst_brkm(TBROK | TERRNO, cleanup,
-                        "socket bind failed for getpeername " "test %d",
-                        testno);
+                        "socket bind failed for getpeername test %d", i);
        }
-       sinlen = sizeof(fsin1);
 }
 
-void cleanup1(void)
+static void setup4(int i)
 {
-       (void)close(s);
-       s = -1;
+       if (socketpair(PF_UNIX, SOCK_STREAM, 0, sv) < 0) {
+               tst_brkm(TBROK | TERRNO, cleanup,
+                        "socketpair failed for getpeername test %d", i);
+       }
+       test_cases[i].sockfd = sv[0];
 }
 
-void setup2(void)
+static void cleanup2(int i)
 {
-       int sv[2];
-
-       if (socketpair(tdat[testno].domain, tdat[testno].type,
-                      tdat[testno].proto, sv) < 0) {
-               tst_brkm(TBROK | TERRNO, cleanup,
-                        "socketpair failed for getpeername " "test %d",
-                        testno);
-       }
-       s = sv[0];
-       s2 = sv[1];
+       SAFE_CLOSE(cleanup, test_cases[i].sockfd);
 }
 
-void cleanup2(void)
+static void cleanup4(int i)
 {
-       (void)close(s);
-       (void)close(s2);
-       s = s2 = -1;
+       SAFE_CLOSE(cleanup, sv[0]);
+       SAFE_CLOSE(cleanup, sv[1]);
 }
-- 
1.8.2.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=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to