mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-01 04:09:30 +08:00
Handle return values from fchown
The function fchown is annotated with warn_unused_result. As formerly used in the code, it would emit a compiler warning ```warning: ignoring return value of ‘fchown’, declared with attribute warn_unused_result [-Wunused-result]``` This commit notes the return value and emits appropriate error/logging messages if the call fails, creating more traceable results and satisfying the compiler.
This commit is contained in:
parent
540bdfcb02
commit
46b9f263ac
|
@ -859,22 +859,23 @@ bool env_universal_t::sync(callback_data_list_t *callbacks)
|
||||||
success = this->write_to_fd(private_fd, private_file_path);
|
success = this->write_to_fd(private_fd, private_file_path);
|
||||||
if (! success) UNIVERSAL_LOG("write_to_fd() failed");
|
if (! success) UNIVERSAL_LOG("write_to_fd() failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
/* Ensure we maintain ownership and permissions (#2176) */
|
/* Ensure we maintain ownership and permissions (#2176) */
|
||||||
struct stat sbuf;
|
struct stat sbuf;
|
||||||
if (wstat(vars_path, &sbuf) >= 0)
|
if (wstat(vars_path, &sbuf) >= 0)
|
||||||
{
|
{
|
||||||
fchown(private_fd, sbuf.st_uid, sbuf.st_gid);
|
if (0 > fchown(private_fd, sbuf.st_uid, sbuf.st_gid))
|
||||||
|
UNIVERSAL_LOG("fchown() failed");
|
||||||
fchmod(private_fd, sbuf.st_mode);
|
fchmod(private_fd, sbuf.st_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Linux by default stores the mtime with low precision, low enough that updates that occur in quick succession may
|
/* Linux by default stores the mtime with low precision, low enough that updates that occur in quick succession may
|
||||||
result in the same mtime (even the nanoseconds field). So manually set the mtime of the new file to a high-precision
|
result in the same mtime (even the nanoseconds field). So manually set the mtime of the new file to a high-precision
|
||||||
clock. Note that this is only necessary because Linux aggressively reuses inodes, causing the ABA problem; on other
|
clock. Note that this is only necessary because Linux aggressively reuses inodes, causing the ABA problem; on other
|
||||||
platforms we tend to notice the file has changed due to a different inode (or file size!)
|
platforms we tend to notice the file has changed due to a different inode (or file size!)
|
||||||
|
|
||||||
It's probably worth finding a simpler solution to this. The tests ran into this, but it's unlikely to affect users.
|
It's probably worth finding a simpler solution to this. The tests ran into this, but it's unlikely to affect users.
|
||||||
*/
|
*/
|
||||||
#if HAVE_CLOCK_GETTIME && HAVE_FUTIMENS
|
#if HAVE_CLOCK_GETTIME && HAVE_FUTIMENS
|
||||||
|
|
|
@ -1453,7 +1453,10 @@ bool history_t::save_internal_via_rewrite()
|
||||||
if (wstat(new_name, &sbuf) >= 0)
|
if (wstat(new_name, &sbuf) >= 0)
|
||||||
{
|
{
|
||||||
/* Success */
|
/* Success */
|
||||||
fchown(out_fd, sbuf.st_uid, sbuf.st_gid);
|
if (0 > fchown(out_fd, sbuf.st_uid, sbuf.st_gid))
|
||||||
|
{
|
||||||
|
debug(2, L"Error when changing ownership of history file");
|
||||||
|
}
|
||||||
fchmod(out_fd, sbuf.st_mode);
|
fchmod(out_fd, sbuf.st_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user