Print this page
72 _tx_error needs to preserve the errno value it is supposed to display

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libnsl/nsl/t_error.c
          +++ new/usr/src/lib/libnsl/nsl/t_error.c
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   *
  20   20   * CDDL HEADER END
  21   21   */
  22   22  
  23   23  /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
  24   24  /*        All Rights Reserved   */
  25   25  
  26   26  /*
  27   27   * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  28   28   * Use is subject to license terms.
       29 + * Copyright (c) 2012 Gary Mills
  29   30   */
  30   31  
  31      -#pragma ident   "%Z%%M% %I%     %E% SMI"        /* SVr4.0 1.2 */
  32      -
  33   32  #include "mt.h"
  34   33  #include <xti.h>
  35   34  #include <errno.h>
  36   35  #include <unistd.h>
  37   36  #include <stdio.h>
  38   37  #include <string.h>
  39   38  
  40   39  /* ARGSUSED1 */
  41   40  int
  42   41  _tx_error(const char *s, int api_semantics)
  43   42  {
  44   43          const char *c;
  45      -        int n;
       44 +        int errnum = errno;     /* In case a system call fails. */
  46   45  
  47   46          c = t_strerror(t_errno);
  48   47          if (s != NULL && *s != '\0') {
  49      -                n = strlen(s);
  50      -                if (n) {
  51      -                        (void) write(2, s, (unsigned)n);
  52      -                        (void) write(2, ": ", 2);
  53      -                }
       48 +                (void) write(2, s, (unsigned)strlen(s));
       49 +                (void) write(2, ": ", 2);
  54   50          }
  55   51          (void) write(2, c, (unsigned)strlen(c));
  56   52          if (t_errno == TSYSERR) {
       53 +                c = strerror(errnum);
  57   54                  (void) write(2, ": ", 2);
  58      -                perror("");
  59      -        } else
  60      -                (void) write(2, "\n", 1);
       55 +                (void) write(2, c, (unsigned)strlen(c));
       56 +        }
       57 +        (void) write(2, "\n", 1);
  61   58          return (0);
  62   59  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX