Share stat() Calls in Uses of UTIL_chmod()
parent
0a8aacb4db
commit
c1449143c5
|
@ -502,14 +502,21 @@ void FIO_setContentSize(FIO_prefs_t* const prefs, int value)
|
||||||
* @result : Unlink `fileName`, even if it's read-only */
|
* @result : Unlink `fileName`, even if it's read-only */
|
||||||
static int FIO_remove(const char* path)
|
static int FIO_remove(const char* path)
|
||||||
{
|
{
|
||||||
if (!UTIL_isRegularFile(path)) {
|
stat_t statbuf;
|
||||||
DISPLAYLEVEL(2, "zstd: Refusing to remove non-regular file %s \n", path);
|
if (!UTIL_stat(path, &statbuf)) {
|
||||||
|
DISPLAYLEVEL(2, "zstd: Failed to stat %s while trying to remove it\n", path);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!UTIL_isRegularFileStat(&statbuf)) {
|
||||||
|
DISPLAYLEVEL(2, "zstd: Refusing to remove non-regular file %s\n", path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#if defined(_WIN32) || defined(WIN32)
|
#if defined(_WIN32) || defined(WIN32)
|
||||||
/* windows doesn't allow remove read-only files,
|
/* windows doesn't allow remove read-only files,
|
||||||
* so try to make it writable first */
|
* so try to make it writable first */
|
||||||
UTIL_chmod(path, NULL, _S_IWRITE);
|
if (!(statbuf.mode & _S_IWRITE)) {
|
||||||
|
UTIL_chmod(path, &statbuf, _S_IWRITE);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return remove(path);
|
return remove(path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,7 +157,8 @@ int UTIL_setFileStat(const char *filename, const stat_t *statbuf)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
if (!UTIL_isRegularFile(filename))
|
stat_t curStatBuf;
|
||||||
|
if (!UTIL_stat(filename, &curStatBuf) || !UTIL_isRegularFileStat(&curStatBuf))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* set access and modification times */
|
/* set access and modification times */
|
||||||
|
@ -185,7 +186,7 @@ int UTIL_setFileStat(const char *filename, const stat_t *statbuf)
|
||||||
res += chown(filename, statbuf->st_uid, statbuf->st_gid); /* Copy ownership */
|
res += chown(filename, statbuf->st_uid, statbuf->st_gid); /* Copy ownership */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
res += UTIL_chmod(filename, NULL, statbuf->st_mode & 07777); /* Copy file permissions */
|
res += UTIL_chmod(filename, &curStatBuf, statbuf->st_mode & 07777); /* Copy file permissions */
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
return -res; /* number of errors is returned */
|
return -res; /* number of errors is returned */
|
||||||
|
|
Loading…
Reference in New Issue