Changeset 192 for trunk/src/sh_unix.c


Ignore:
Timestamp:
Nov 12, 2008, 12:37:00 AM (16 years ago)
Author:
katerina
Message:

Fixes for cygwin, and improved error diagnostics (tickets #126, #127, #128).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_unix.c

    r185 r192  
    32813281  struct stat   fbuf;
    32823282  int           stat_return;
     3283  int           stat_errno = 0;
    32833284
    32843285  ShFileType    type;
     
    32933294
    32943295  SL_TICKET     rval_open;
     3296  int           err_open = 0;
     3297
    32953298  int           fd;
    32963299  int           fstat_return;
     3300  int           fstat_errno = 0;
     3301
    32973302  sh_string   * content = NULL;
    32983303     
     
    33163321                             path /* theFile->fullpath */, &buf);
    33173322
     3323  if (stat_return)
     3324    stat_errno = errno;
     3325
    33183326  fd           = -1;
    33193327  fstat_return = -1;
     
    33253333    {
    33263334      rval_open = sl_open_fastread (path /* theFile->fullpath */, SL_YESPRIV);
     3335      if (SL_ISERROR(rval_open))
     3336        err_open = errno;
    33273337
    33283338      alert_timeout = 120; /* this is per 8K block now ! */
     
    33523362
    33533363  if (fd >= 0)
    3354     fstat_return = retry_fstat (FIL__, __LINE__, fd, &fbuf);
     3364    {
     3365      fstat_return = retry_fstat (FIL__, __LINE__, fd, &fbuf);
     3366      if (fstat_return)
     3367        fstat_errno = errno;
     3368    }
    33553369  else
    3356     fd = -1;
     3370    {
     3371      fd = -1;
     3372    }
    33573373     
    33583374
     
    33703386          if (S_FALSE == sh_ignore_chk_del(theFile->fullpath)) {
    33713387            char errbuf[SH_ERRBUF_SIZE];
     3388            uid_t euid;
     3389            (void) sl_get_euid(&euid);
    33723390            tmp2 = sh_util_safe_name (theFile->fullpath);
    3373             sh_error_handle (level, FIL__, __LINE__, stat_return, MSG_FI_LSTAT,
    3374                              sh_error_message (stat_return, errbuf, sizeof(errbuf)),
     3391            sh_error_handle (level, FIL__, __LINE__, stat_return, MSG_FI_STAT,
     3392                             _("lstat"),
     3393                             sh_error_message (stat_errno, errbuf, sizeof(errbuf)),
     3394                             (long) euid,
    33753395                             tmp2);
    33763396            SH_FREE(tmp2);
     
    35003520   */
    35013521
    3502   else    /* fstat_return != 0 or !S_ISREG(fbuf.st_mode) */
     3522  else    /* fstat_return != 0 or !S_ISREG(fbuf.st_mode) or open() failed */
    35033523    {
    35043524      uid_t   euid;
    3505       int fstat_errval = errno;
     3525
    35063526      if (fileHash != NULL)
    35073527        sl_strlcpy(fileHash, SH_KEY_NULL, KEY_LEN+1);
     
    35133533          if (fstat_return != 0)
    35143534            {
     3535              char errbuf[SH_ERRBUF_SIZE];
    35153536              (void) sl_get_euid(&euid);
    3516               sh_error_handle (level, FIL__, __LINE__, fstat_errval,
    3517                                MSG_E_ACCESS, (long) euid, tmp2);
     3537
     3538              sh_error_handle (level, FIL__, __LINE__, stat_return, MSG_FI_STAT,
     3539                               _("fstat"),
     3540                               sh_error_message (fstat_errno, errbuf, sizeof(errbuf)),
     3541                               (long) euid,
     3542                               tmp2);
    35183543            }
    35193544          else if (!S_ISREG(fbuf.st_mode))
    35203545            {
    3521               sh_error_handle (level, FIL__, __LINE__, fstat_errval,
     3546              sh_error_handle (level, FIL__, __LINE__, fstat_errno,
    35223547                               MSG_E_NOTREG, tmp2);
    35233548            }
    35243549          else
    35253550            {
    3526               sh_error_handle (level, FIL__, __LINE__, fstat_errval,
    3527                                MSG_E_READ, tmp2);
     3551              char errbuf[SH_ERRBUF_SIZE];
     3552              char errbuf2[SH_ERRBUF_SIZE];
     3553              sl_strlcpy(errbuf, sl_error_string(rval_open), sizeof(errbuf));
     3554              sh_error_message(err_open, errbuf2, sizeof(errbuf2));
     3555              sh_error_handle (level, FIL__, __LINE__, err_open,
     3556                               MSG_E_READ, errbuf, errbuf2, tmp2);
    35283557            }
    35293558          SH_FREE(tmp2);
     
    37373766          if (stat_return != ENOENT)
    37383767            {
     3768              uid_t euid;
    37393769              char errbuf[SH_ERRBUF_SIZE];
     3770
     3771              (void) sl_get_euid(&euid);
    37403772              sh_error_handle (level, FIL__, __LINE__, stat_return,
    3741                                MSG_FI_LSTAT,
     3773                               MSG_FI_STAT,
     3774                               _("lstat"),
    37423775                               sh_error_message (stat_return,errbuf, sizeof(errbuf)),
     3776                               (long) euid,
    37433777                               tmp2);
    37443778            }
Note: See TracChangeset for help on using the changeset viewer.