>From 4fc376ec43c8a235306ef719db3e157a67969598 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Thu, 18 May 2023 14:30:08 +0200 Subject: [PATCH] Comment a bit on the xattr extraction logic * src/extract.c (extract_file): Document why we pre-create with S_IWUSR. (set_xattr): Drop the INVERT_PERMISSIONS doc leftover. --- src/extract.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/extract.c b/src/extract.c index aec5de69..7adc7aff 100644 --- a/src/extract.c +++ b/src/extract.c @@ -902,11 +902,10 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made) (e.g. on Lustre distributed parallel filesystem - setting info about how many servers is this file striped over, stripe size, mirror copies, etc. in advance dramatically improves the following performance of reading and - writing a file). If not restoring permissions, invert the INVERT_PERMISSIONS - bits from the file's current permissions. TYPEFLAG specifies the type of the - file. Return a negative number (setting errno) on failure, zero if - successful but FILE_NAME was not created (e.g., xattrs not - available), and a positive number if FILE_NAME was created. */ + writing a file). TYPEFLAG specifies the type of the file. Return a negative + number (setting errno) on failure, zero if successful but FILE_NAME was not + created (e.g., xattrs not available), and a positive number if FILE_NAME was + created. */ static int set_xattr (char const *file_name, struct tar_stat_info const *st, mode_t mode, char typeflag) @@ -1271,6 +1270,10 @@ extract_file (char *file_name, int typeflag) else { int file_created; + /* Either we pre-create the file in set_xattr(), or we just directly open + the file in open_output_file() with O_CREAT. If pre-creating, we need + to use S_IWUSR so we can open the file O_WRONLY in open_output_file(). + The additional mode bit is cleared later by set_stat()->set_mode(). */ while (((file_created = set_xattr (file_name, ¤t_stat_info, mode | S_IWUSR, typeflag)) < 0) -- 2.40.1