Print this page
15291 zfs-tests errno flaws exposed by 15220

Split Close
Expand all
Collapse all
          --- old/usr/src/test/zfs-tests/cmd/file_check/file_check.c
          +++ new/usr/src/test/zfs-tests/cmd/file_check/file_check.c
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  
       27 +/*
       28 + * Copyright 2022 MNX Cloud, Inc.
       29 + */
       30 +
  27   31  #include "../file_common.h"
  28   32  
  29   33  static unsigned char bigbuffer[BIGBUFFERSIZE];
  30   34  
  31   35  /*
  32   36   * Given a filename, check that the file consists entirely
  33   37   * of a particular pattern. If the pattern is not specified a
  34   38   * default will be used. For default values see file_common.h
  35   39   */
  36   40  int
↓ open down ↓ 22 lines elided ↑ open up ↑
  59   63           * Read the file contents and check every character
  60   64           * against the supplied pattern. Abort if the
  61   65           * pattern check fails.
  62   66           */
  63   67          if ((bigfd = open(argv[1], O_RDONLY)) == -1) {
  64   68                  (void) printf("open %s failed %d\n", argv[1], errno);
  65   69                  exit(1);
  66   70          }
  67   71  
  68   72          do {
       73 +                int exitcode;
       74 +
  69   75                  if ((n = read(bigfd, &bigbuffer, bigbuffersize)) == -1) {
       76 +                        exitcode = errno;
  70   77                          (void) printf("read failed (%ld), %d\n", n, errno);
  71      -                        exit(errno);
       78 +                        exit(exitcode);
  72   79                  }
  73   80  
  74   81                  for (i = 0; i < n; i++) {
  75   82                          if (bigbuffer[i] != fillchar) {
  76   83                                  (void) printf("error %s: 0x%x != 0x%x)\n",
  77   84                                      argv[1], bigbuffer[i], fillchar);
  78   85                                  exit(1);
  79   86                          }
  80   87                  }
  81   88  
  82   89                  read_count += n;
  83   90          } while (n == bigbuffersize);
  84   91  
  85   92          return (0);
  86   93  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX