X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=wrapper.c;h=dd7ecbb115edd979f657e2e209126d364e6ccfac;hb=57a00bf6042e429883c177e94f3a5d7cc7e9e8ad;hp=bac59d2c41bae7441038b30728c696b6280f4c2d;hpb=37ba4c61d04d0782bd34971be5cc4eec10f59d36;p=~andy%2Fgit diff --git a/wrapper.c b/wrapper.c index bac59d2c4..dd7ecbb11 100644 --- a/wrapper.c +++ b/wrapper.c @@ -408,18 +408,24 @@ void warn_on_inaccessible(const char *path) warning(_("unable to access '%s': %s"), path, strerror(errno)); } -int access_or_warn(const char *path, int mode) +static int access_error_is_ok(int err, unsigned flag) +{ + return err == ENOENT || err == ENOTDIR || + ((flag & ACCESS_EACCES_OK) && err == EACCES); +} + +int access_or_warn(const char *path, int mode, unsigned flag) { int ret = access(path, mode); - if (ret && errno != ENOENT && errno != ENOTDIR) + if (ret && !access_error_is_ok(errno, flag)) warn_on_inaccessible(path); return ret; } -int access_or_die(const char *path, int mode) +int access_or_die(const char *path, int mode, unsigned flag) { int ret = access(path, mode); - if (ret && errno != ENOENT && errno != ENOTDIR) + if (ret && !access_error_is_ok(errno, flag)) die_errno(_("unable to access '%s'"), path); return ret; }