nsprpub/pr/tests/sigpipe.c

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7  *************************************************************************
     8  *
     9  * Test: sigpipe.c
    10  *
    11  *     Test the SIGPIPE handler in NSPR.  This test applies to Unix only.
    12  *
    13  *************************************************************************
    14  */
    16 #if !defined(XP_UNIX) && !defined(XP_OS2)
    18 int main(void)
    19 {
    20     /* This test applies to Unix and OS/2. */
    21     return 0;
    22 }
    24 #else /* XP_UNIX && OS/2 */
    26 #include "nspr.h"
    28 #ifdef XP_OS2
    29 #define INCL_DOSQUEUES
    30 #define INCL_DOSERRORS
    31 #include <os2.h>
    32 #endif
    34 #include <stdio.h>
    35 #include <unistd.h>
    36 #include <errno.h>
    38 static void Test(void *arg)
    39 {
    40 #ifdef XP_OS2
    41     HFILE pipefd[2];
    42 #else
    43     int pipefd[2];
    44 #endif
    45     int rv;
    46     char c = '\0';
    48 #ifdef XP_OS2
    49     if (DosCreatePipe(&pipefd[0], &pipefd[1], 4096) != 0) {
    50 #else
    51     if (pipe(pipefd) == -1) {
    52 #endif
    53         fprintf(stderr, "cannot create pipe: %d\n", errno);
    54         exit(1);
    55     }
    56     close(pipefd[0]);
    58     rv = write(pipefd[1], &c, 1);
    59     if (rv != -1) {
    60         fprintf(stderr, "write to broken pipe should have failed with EPIPE but returned %d\n", rv);
    61         exit(1);
    62     }
    63 #ifdef SYMBIAN
    64     /* Have mercy on the unknown 142 errno, it seems ok */
    65     if (errno != EPIPE && errno != 142) {
    66 #else
    67     if (errno != EPIPE) {
    68 #endif
    69         fprintf(stderr, "write to broken pipe failed but with wrong errno: %d\n", errno);
    70         exit(1);
    71     }
    72     close(pipefd[1]);
    73     printf("write to broken pipe failed with EPIPE, as expected\n");
    74 }
    76 int main(int argc, char **argv)
    77 {
    78     PRThread *thread;
    80     /* This initializes NSPR. */
    81     PR_SetError(0, 0);
    83     thread = PR_CreateThread(PR_USER_THREAD, Test, NULL, PR_PRIORITY_NORMAL,
    84             PR_GLOBAL_THREAD, PR_JOINABLE_THREAD, 0);
    85     if (thread == NULL) {
    86         fprintf(stderr, "PR_CreateThread failed\n");
    87         exit(1);
    88     }
    89     if (PR_JoinThread(thread) == PR_FAILURE) {
    90         fprintf(stderr, "PR_JoinThread failed\n");
    91         exit(1);
    92     }
    93     Test(NULL);
    95     printf("PASSED\n");
    96     return 0;
    97 }
    99 #endif /* XP_UNIX */

mercurial