Carl Shapiro pushed to branch master at cmucl / cmucl

Commits:

1 changed file:

Changes:

  • src/lisp/os-common.c
    ... ... @@ -753,26 +753,27 @@ os_file_author(const char *path)
    753 753
          * Keep trying with larger buffers until a maximum is reached.  We
    
    754 754
          * assume (1 << 20) is large enough for any OS.
    
    755 755
          */
    
    756
    -    while (size <= (1 << 20)) {
    
    757
    -        switch (getpwuid_r(sb.st_uid, &pwd, buffer, size, &ppwd)) {
    
    758
    -          case 0:
    
    759
    -              /* Success, though we might not have a matching entry */
    
    760
    -              result = (ppwd == NULL) ? NULL : strdup(pwd.pw_name);
    
    761
    -              goto exit;
    
    762
    -          case ERANGE:
    
    763
    -              /* Buffer is too small, double its size and try again */
    
    764
    -              size *= 2;
    
    765
    -              if ((buffer = realloc(obuffer, size)) == NULL) {
    
    766
    -                  goto exit;
    
    767
    -              }
    
    768
    -	      obuffer = buffer;
    
    769
    -              continue;
    
    770
    -          default:
    
    771
    -              /* All other errors */
    
    772
    -              goto exit;
    
    773
    -        }
    
    756
    +again:
    
    757
    +    switch (getpwuid_r(sb.st_uid, &pwd, buffer, size, &ppwd)) {
    
    758
    +      case 0:
    
    759
    +	  /* Success, though we might not have a matching entry */
    
    760
    +	  result = (ppwd == NULL) ? NULL : strdup(pwd.pw_name);
    
    761
    +	  break;
    
    762
    +      case ERANGE:
    
    763
    +	  /* Buffer is too small, double its size and try again */
    
    764
    +	  size *= 2;
    
    765
    +	  if (size > (1 << 20)) {
    
    766
    +	      break;
    
    767
    +	  }
    
    768
    +	  if ((buffer = realloc(obuffer, size)) == NULL) {
    
    769
    +	      break;
    
    770
    +	  }
    
    771
    +	  obuffer = buffer;
    
    772
    +	  goto again;
    
    773
    +      default:
    
    774
    +	/* All other errors */
    
    775
    +	break;
    
    774 776
         }
    
    775
    -exit:
    
    776 777
         free(obuffer);
    
    777 778
         
    
    778 779
         return result;