From debbugs-submit-bounces@debbugs.gnu.org Sat Sep 24 19:38:14 2022 Received: (at submit) by debbugs.gnu.org; 24 Sep 2022 23:38:14 +0000 Received: from localhost ([127.0.0.1]:45443 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocEir-0004Aw-JC for submit@debbugs.gnu.org; Sat, 24 Sep 2022 19:38:14 -0400 Received: from lists.gnu.org ([209.51.188.17]:32808) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocEin-0004Ak-6j for submit@debbugs.gnu.org; Sat, 24 Sep 2022 19:38:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40106) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ocEin-0006hB-0E for bug-coreutils@gnu.org; Sat, 24 Sep 2022 19:38:09 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:54798) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ocEif-00032F-OZ for bug-coreutils@gnu.org; Sat, 24 Sep 2022 19:38:08 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 64AE0160091 for ; Sat, 24 Sep 2022 16:37:59 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id NCQXUjgKyBQG; Sat, 24 Sep 2022 16:37:57 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 8F844160090; Sat, 24 Sep 2022 16:37:57 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.9.2 zimbra.cs.ucla.edu 8F844160090 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=78364E5A-2AF3-11ED-87FA-8298ECA2D365; t=1664062677; bh=gyhTcIMu5AyBHgh2mG2gidEs6MvizbcUGU+Wht3Umbo=; h=From:To:Subject:Date:Message-Id:MIME-Version: Content-Transfer-Encoding; b=QgV2MvIqZJmltz0gv/OIBXdMybTD/ietCehC/TOcsfBSI3MZpE14pOG28N/JMp8oG hKiPQqejSJU0VOhhKZkEE8dkkwZJh5P7EyS+HF78BiDtHctwJ7m+jZ30+dqHjY+u7m Gak0daeEUdcxBt+V5cTkcxTlogzvm1TkIKEt8Dmc= X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 1f3ktZw9yCZO; Sat, 24 Sep 2022 16:37:57 -0700 (PDT) Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 2C4CE16008E; Sat, 24 Sep 2022 16:37:57 -0700 (PDT) From: Paul Eggert To: bug-coreutils@gnu.org Subject: [INSTALLED] rm: fix diagnostics on I/O error Date: Sat, 24 Sep 2022 16:37:49 -0700 Message-Id: <20220924233750.417348-1-eggert@cs.ucla.edu> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.68; envelope-from=eggert@cs.ucla.edu; helo=zimbra.cs.ucla.edu X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.6 (-) X-Debbugs-Envelope-To: submit Cc: Paul Eggert X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.6 (--) I ran into this problem when attempting to recursively remove a directory in a filesystem on flaky hardware. Although the underlying readdir syscall failed with errno =3D=3D EIO, rm issued no diagnostic about the I/O error. Without this patch I see this behavior: $ rm -fr baddir rm: cannot remove 'baddir': Directory not empty $ rm -ir baddir rm: descend into directory 'baddir'? y rm: remove directory 'baddir'? y rm: cannot remove 'baddir': Directory not empty With this patch I see the following behavior, which lets the user know about the I/O error when rm tries to read baddir's directory entries: $ rm -fr baddir rm: cannot remove 'baddir': Input/output error $ rm -ir baddir rm: cannot remove 'baddir': Input/output error * src/remove.c (Ternary): Remove. All uses removed. (get_dir_status): New static function. (prompt): Last arg is now directory status, not ternary. Return RM_USER_ACCEPTED if user explicitly accepted. All uses changed. Report any significant error in directory status right away. (prompt, rm_fts): Use get_dir_status to get directory status lazily. (excise): Treat any FTS_DNR errno as being more descriptive, not just EPERM and EACCESS. For example, EIO is more descriptive. (rm_fts): Distinguish more clearly between explicit and implied user OK. * src/remove.h (RM_USER_ACCEPTED): New constant. (VALID_STATUS): Treat it as valid. * src/system.h (is_empty_dir): Remove, replacing with ... (directory_status): ... this more-general function. All uses changed. Avoid undefined behavior of looking at a non-null readdir pointer after corresponding closedir. * tests/rm/rm-readdir-fail.sh: Adjust test of internals to match current behavior. --- src/remove.c | 80 +++++++++++++++++++------------------ src/remove.h | 4 +- src/rmdir.c | 3 +- src/system.h | 25 ++++++------ tests/rm/rm-readdir-fail.sh | 1 + 5 files changed, 58 insertions(+), 55 deletions(-) diff --git a/src/remove.c b/src/remove.c index 6756c409d..0b6754bf7 100644 --- a/src/remove.c +++ b/src/remove.c @@ -33,14 +33,6 @@ #include "xfts.h" #include "yesno.h" =20 -enum Ternary - { - T_UNKNOWN =3D 2, - T_NO, - T_YES - }; -typedef enum Ternary Ternary; - /* The prompt function may be called twice for a given directory. The first time, we ask whether to descend into it, and the second time, we ask whether to remove it. */ @@ -168,9 +160,23 @@ write_protected_non_symlink (int fd_cwd, } } =20 -/* Prompt whether to remove FILENAME (ent->, if required via a combinati= on of +/* Return the status of the directory identified by FTS and ENT. + This is -1 if the directory is empty, 0 if it is nonempty, + and a positive error number if there was trouble determining the stat= us, + e.g., it is not a directory, or permissions problems, or I/O errors. + Use *DIR_STATUS is a cache for the status. */ +static int +get_dir_status (FTS const *fts, FTSENT const *ent, int *dir_status) +{ + if (*dir_status < -1) + *dir_status =3D directory_status (fts->fts_cwd_fd, ent->fts_accpath)= ; + return *dir_status; +} + +/* Prompt whether to remove FILENAME, if required via a combination of the options specified by X and/or file attributes. If the file may - be removed, return RM_OK. If the user declines to remove the file, + be removed, return RM_OK or RM_USER_ACCEPTED, the latter if the user + was prompted and accepted. If the user declines to remove the file, return RM_USER_DECLINED. If not ignoring missing files and we cannot lstat FILENAME, then return RM_ERROR. =20 @@ -178,20 +184,16 @@ write_protected_non_symlink (int fd_cwd, =20 Depending on MODE, ask whether to 'descend into' or to 'remove' the directory FILENAME. MODE is ignored when FILENAME is not a directory= . - Set *IS_EMPTY_P to T_YES if FILENAME is an empty directory, and it is - appropriate to try to remove it with rmdir (e.g. recursive mode). - Don't even try to set *IS_EMPTY_P when MODE =3D=3D PA_REMOVE_DIR. */ + Use and update *DIR_STATUS as needed, via the conventions of + get_dir_status. */ static enum RM_status prompt (FTS const *fts, FTSENT const *ent, bool is_dir, struct rm_options const *x, enum Prompt_action mode, - Ternary *is_empty_p) + int *dir_status) { int fd_cwd =3D fts->fts_cwd_fd; char const *full_name =3D ent->fts_path; char const *filename =3D ent->fts_accpath; - if (is_empty_p) - *is_empty_p =3D T_UNKNOWN; - struct stat st; struct stat *sbuf =3D &st; cache_stat_init (sbuf); @@ -199,13 +201,6 @@ prompt (FTS const *fts, FTSENT const *ent, bool is_d= ir, int dirent_type =3D is_dir ? DT_DIR : DT_UNKNOWN; int write_protected =3D 0; =20 - bool is_empty =3D false; - if (is_empty_p) - { - is_empty =3D is_empty_dir (fd_cwd, filename); - *is_empty_p =3D is_empty ? T_YES : T_NO; - } - /* When nonzero, this indicates that we failed to remove a child entry= , either because the user declined an interactive prompt, or due to some other failure, like permissions. */ @@ -257,10 +252,12 @@ prompt (FTS const *fts, FTSENT const *ent, bool is_= dir, /* Unless we're either deleting directories or deleting recursively, we want to raise an EISDIR error rather tha= n prompting the user */ - if ( ! (x->recursive || (x->remove_empty_directories && is_e= mpty))) + if ( ! (x->recursive + || (x->remove_empty_directories + && get_dir_status (fts, ent, dir_status) < 0))) { write_protected =3D -1; - wp_errno =3D EISDIR; + wp_errno =3D *dir_status <=3D 0 ? EISDIR : *dir_status; } break; } @@ -276,12 +273,17 @@ prompt (FTS const *fts, FTSENT const *ent, bool is_= dir, /* Issue the prompt. */ if (dirent_type =3D=3D DT_DIR && mode =3D=3D PA_DESCEND_INTO_DIR - && !is_empty) + && get_dir_status (fts, ent, dir_status) =3D=3D 0) fprintf (stderr, (write_protected ? _("%s: descend into write-protected directory %s? ") : _("%s: descend into directory %s? ")), program_name, quoted_name); + else if (0 < *dir_status) + { + error (0, *dir_status, _("cannot remove %s"), quoted_name); + return RM_ERROR; + } else { if (cache_fstatat (fd_cwd, filename, sbuf, AT_SYMLINK_NOFOLLOW= ) !=3D 0) @@ -302,8 +304,7 @@ prompt (FTS const *fts, FTSENT const *ent, bool is_di= r, program_name, file_type (sbuf), quoted_name); } =20 - if (!yesno ()) - return RM_USER_DECLINED; + return yesno () ? RM_USER_ACCEPTED : RM_USER_DECLINED; } return RM_OK; } @@ -405,13 +406,12 @@ excise (FTS *fts, FTSENT *ent, struct rm_options co= nst *x, bool is_dir) =20 /* When failing to rmdir an unreadable directory, we see errno values like EISDIR or ENOTDIR (or, on Solaris 10, EEXIST), but they would = be - meaningless in a diagnostic. When that happens and the errno value - from the failed open is EPERM or EACCES, use the earlier, more + meaningless in a diagnostic. When that happens, use the earlier, m= ore descriptive errno value. */ if (ent->fts_info =3D=3D FTS_DNR && (errno =3D=3D ENOTEMPTY || errno =3D=3D EISDIR || errno =3D=3D = ENOTDIR || errno =3D=3D EEXIST) - && (ent->fts_errno =3D=3D EPERM || ent->fts_errno =3D=3D EACCES)) + && ent->fts_errno !=3D 0) errno =3D ent->fts_errno; error (0, errno, _("cannot remove %s"), quoteaf (ent->fts_path)); mark_ancestor_dirs (ent); @@ -427,12 +427,14 @@ excise (FTS *fts, FTSENT *ent, struct rm_options co= nst *x, bool is_dir) static enum RM_status rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x) { + int dir_status =3D -2; + switch (ent->fts_info) { case FTS_D: /* preorder directory */ if (! x->recursive && !(x->remove_empty_directories - && is_empty_dir (fts->fts_cwd_fd, ent->fts_accpath))) + && get_dir_status (fts, ent, &dir_status) < 0)) { /* This is the first (pre-order) encounter with a directory that we cannot delete. @@ -507,11 +509,10 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options co= nst *x) } =20 { - Ternary is_empty_directory; enum RM_status s =3D prompt (fts, ent, true /*is_dir*/, x, - PA_DESCEND_INTO_DIR, &is_empty_direct= ory); + PA_DESCEND_INTO_DIR, &dir_status); =20 - if (s =3D=3D RM_OK && is_empty_directory =3D=3D T_YES) + if (s =3D=3D RM_USER_ACCEPTED && dir_status =3D=3D -1) { /* When we know (from prompt when in interactive mode) that this is an empty directory, don't prompt twice. */ @@ -520,7 +521,7 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options cons= t *x) fts_skip_tree (fts, ent); } =20 - if (s !=3D RM_OK) + if (! (s =3D=3D RM_OK || s =3D=3D RM_USER_ACCEPTED)) { mark_ancestor_dirs (ent); fts_skip_tree (fts, ent); @@ -553,8 +554,9 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options cons= t *x) } =20 bool is_dir =3D ent->fts_info =3D=3D FTS_DP || ent->fts_info =3D= =3D FTS_DNR; - enum RM_status s =3D prompt (fts, ent, is_dir, x, PA_REMOVE_DIR,= NULL); - if (s !=3D RM_OK) + enum RM_status s =3D prompt (fts, ent, is_dir, x, PA_REMOVE_DIR, + &dir_status); + if (! (s =3D=3D RM_OK || s =3D=3D RM_USER_ACCEPTED)) return s; return excise (fts, ent, x, is_dir); } diff --git a/src/remove.h b/src/remove.h index e926084e2..b92c63daa 100644 --- a/src/remove.h +++ b/src/remove.h @@ -79,13 +79,15 @@ enum RM_status { /* These must be listed in order of increasing seriousness. */ RM_OK =3D 2, + RM_USER_ACCEPTED, RM_USER_DECLINED, RM_ERROR, RM_NONEMPTY_DIR }; =20 # define VALID_STATUS(S) \ - ((S) =3D=3D RM_OK || (S) =3D=3D RM_USER_DECLINED || (S) =3D=3D RM_ERRO= R) + ((S) =3D=3D RM_OK || (S) =3D=3D RM_USER_ACCEPTED || (S) =3D=3D RM_USER= _DECLINED \ + || (S) =3D=3D RM_ERROR) =20 # define UPDATE_STATUS(S, New_value) \ do \ diff --git a/src/rmdir.c b/src/rmdir.c index f6284cbe2..283f332ec 100644 --- a/src/rmdir.c +++ b/src/rmdir.c @@ -101,8 +101,7 @@ ignorable_failure (int error_number, char const *dir) return (ignore_fail_on_non_empty && (errno_rmdir_non_empty (error_number) || (errno_may_be_non_empty (error_number) - && ! is_empty_dir (AT_FDCWD, dir) - && errno =3D=3D 0 /* definitely non empty */))); + && directory_status (AT_FDCWD, dir) =3D=3D 0))); } =20 /* Remove any empty parent directories of DIR. diff --git a/src/system.h b/src/system.h index d36ca1115..91228ec13 100644 --- a/src/system.h +++ b/src/system.h @@ -287,37 +287,36 @@ readdir_ignoring_dot_and_dotdot (DIR *dirp) } } =20 -/* Return true if DIR is determined to be an empty directory. - Return false with ERRNO=3D=3D0 if DIR is a non empty directory. - Return false if not able to determine if directory empty. */ -static inline bool -is_empty_dir (int fd_cwd, char const *dir) +/* Return -1 if DIR is an empty directory, + 0 if DIR is a nonempty directory, + and a positive error number if there was trouble determining + whether DIR is an empty or nonempty directory. */ +static inline int +directory_status (int fd_cwd, char const *dir) { DIR *dirp; - struct dirent const *dp; + bool no_direntries; int saved_errno; int fd =3D openat (fd_cwd, dir, (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NOFOLLOW | O_NONBLOCK)); =20 if (fd < 0) - return false; + return errno; =20 dirp =3D fdopendir (fd); if (dirp =3D=3D NULL) { + saved_errno =3D errno; close (fd); - return false; + return saved_errno; } =20 errno =3D 0; - dp =3D readdir_ignoring_dot_and_dotdot (dirp); + no_direntries =3D !readdir_ignoring_dot_and_dotdot (dirp); saved_errno =3D errno; closedir (dirp); - errno =3D saved_errno; - if (dp !=3D NULL) - return false; - return saved_errno =3D=3D 0 ? true : false; + return no_direntries && saved_errno =3D=3D 0 ? -1 : saved_errno; } =20 /* Factor out some of the common --help and --version processing code. = */ diff --git a/tests/rm/rm-readdir-fail.sh b/tests/rm/rm-readdir-fail.sh index a77d5225f..9dbf9380c 100755 --- a/tests/rm/rm-readdir-fail.sh +++ b/tests/rm/rm-readdir-fail.sh @@ -112,6 +112,7 @@ done # (with ENOENT in this case but it could be anything). cat < exp rm: cannot remove 'dir' +Failed to get dirent rm: traversal failed: dir EOF sed 's/\(rm:.*\):.*/\1/' errt > err || framework_failure_ --=20 2.37.3 From debbugs-submit-bounces@debbugs.gnu.org Sat Sep 24 19:51:04 2022 Received: (at control) by debbugs.gnu.org; 24 Sep 2022 23:51:04 +0000 Received: from localhost ([127.0.0.1]:45489 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocEvI-0004ZG-H2 for submit@debbugs.gnu.org; Sat, 24 Sep 2022 19:51:04 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:52940) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocEvG-0004Ym-81 for control@debbugs.gnu.org; Sat, 24 Sep 2022 19:51:03 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 00B8916008E for ; Sat, 24 Sep 2022 16:50:56 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id GpMLEd3K9GuS for ; Sat, 24 Sep 2022 16:50:55 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 2E8A7160090 for ; Sat, 24 Sep 2022 16:50:55 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.9.2 zimbra.cs.ucla.edu 2E8A7160090 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=78364E5A-2AF3-11ED-87FA-8298ECA2D365; t=1664063455; bh=MF2Hu764tdg3HDYGbChTvRTe0QjZP4s8RLaVF3vjFoI=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type: Content-Transfer-Encoding; b=jolQmp8d7DHcAbmIagihKyNcB6pr2CwfDJ79/EhZ43hRX8SX9tPE+4+kC3TMfgz7z 9yMQy2//KUFdNRWFtINxXNTzhREWAIzNR7xS5E4f3ty+CoUWsDXHD3ebyvG3NjQy5o AvDhbuLGqZWKb6TYwCBHSLvPSbfi3w/s6h3pOGMk= X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id GzeeVRFEpt83 for ; Sat, 24 Sep 2022 16:50:55 -0700 (PDT) Received: from [192.168.1.163] (cpe-172-91-119-151.socal.res.rr.com [172.91.119.151]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 07F8D16008E for ; Sat, 24 Sep 2022 16:50:55 -0700 (PDT) Message-ID: Date: Sat, 24 Sep 2022 16:50:54 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: control@debbugs.gnu.org From: Paul Eggert Subject: 58050 is fixed Organization: UCLA Computer Science Department Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) close 58050 From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 25 10:25:35 2022 Received: (at 58050) by debbugs.gnu.org; 25 Sep 2022 14:25:36 +0000 Received: from localhost ([127.0.0.1]:48315 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocSZb-0000pF-EF for submit@debbugs.gnu.org; Sun, 25 Sep 2022 10:25:35 -0400 Received: from mail-wr1-f53.google.com ([209.85.221.53]:41687) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocSZZ-0000p1-5A for 58050@debbugs.gnu.org; Sun, 25 Sep 2022 10:25:33 -0400 Received: by mail-wr1-f53.google.com with SMTP id t14so6658996wrx.8 for <58050@debbugs.gnu.org>; Sun, 25 Sep 2022 07:25:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:sender:from:to:cc:subject:date; bh=2C4vCms0rIcOqZO/ML2k9p596HnCT76RcjiGqCCIwO8=; b=MnAXqdv8J+o98KrPnoOrI96GAQv/9shqNiReaU2HfImoG4rwuxTe3t+e2Kvrtl54B9 GEict+8rrjRimSH4/hyxwPok32UVD34AKcTovC5+AkLGZUPw46A2h8uM2oXCP2sAGVhc 8j7SlDuFNYrx0myFEVPX2ExbXtYMXh4AHI4OKafSAwLQslmlsgse/uknutfWGqUIJnCF FaeQrFlmruiI873Htu4j2TRH5m9UySYEo5aCFuw1A5Dom8GZvvxbTJZ5eauf2QRNcXmq uf6N0eMUyDbaJSJJB/GzptdC5/pGobkIhQHlKY/dT3DMfb/kHUtlu3qHGfOV00qFQsyc 7vtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:sender:x-gm-message-state:from:to:cc :subject:date; bh=2C4vCms0rIcOqZO/ML2k9p596HnCT76RcjiGqCCIwO8=; b=jz+qATJuY7cXl0FdqZDw/brndJ6mZk4MPZns0j1yq0qHM1A9LtlO3Klr0WTY87sijp LpLw+oljF78dfKKRgtw4TIwPOkIFtmrqZVFCVMPjZOkz0zqO93fSKu7wWM2vWOu8SFlD fDQYDqgWswhZ7e5a8ueje/wObJiRrcrndJokF3FSy1NT1+xgmXZ0XTkTmdhNBKLgteOw o9fsR1Dj2ADUKRbw0aJMvzF6IuAwk0IOeH09f9E2ymy/LhnD6Y0uV/9EnL48HN1tgG/Z RtQdk6/c+uSkj2xxD+OBquPwbX+Q+LjcZrwlmtAw2qscn6bZX8DUNd9TQIvFTyEiMM/B KEZg== X-Gm-Message-State: ACrzQf1YxJVM2jFm8QmnXnSCaGrxs3hoa6eDttIAORmZxYjmFXesAcIf ktYcKMSYYzWvo2aILOiDrOg= X-Google-Smtp-Source: AMsMyM55sQy6CKQKA3+UfBE+TIp5981xixC2HK1gbbnpOUS/wyuvOQbMjy2MFfIo3lzU06HZfsTWvw== X-Received: by 2002:a05:6000:1c8:b0:22a:5a6d:c77a with SMTP id t8-20020a05600001c800b0022a5a6dc77amr10150516wrx.242.1664115927093; Sun, 25 Sep 2022 07:25:27 -0700 (PDT) Received: from [192.168.1.9] (95-44-90-175-dynamic.agg2.lod.rsl-rtd.eircom.net. [95.44.90.175]) by smtp.googlemail.com with ESMTPSA id k22-20020a05600c1c9600b003b340f00f10sm8628527wms.31.2022.09.25.07.25.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 25 Sep 2022 07:25:26 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------J2hg0xkwIaj0VRNYM1lvUs86" Message-ID: <01798ae1-a76f-d3f4-fa4f-983608e5214e@draigBrady.com> Date: Sun, 25 Sep 2022 15:25:25 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:98.0) Gecko/20100101 Thunderbird/98.0 Subject: Re: bug#58050: [INSTALLED] rm: fix diagnostics on I/O error Content-Language: en-US To: Paul Eggert , 58050@debbugs.gnu.org References: <20220924233750.417348-1-eggert@cs.ucla.edu> From: =?UTF-8?Q?P=c3=a1draig_Brady?= In-Reply-To: <20220924233750.417348-1-eggert@cs.ucla.edu> X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: 58050 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) This is a multi-part message in MIME format. --------------J2hg0xkwIaj0VRNYM1lvUs86 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 25/09/2022 00:37, Paul Eggert wrote: > I ran into this problem when attempting to recursively > remove a directory in a filesystem on flaky hardware. > Although the underlying readdir syscall failed with errno == EIO, > rm issued no diagnostic about the I/O error. This looks good. How about the attached to add a NEWS entry, and add DS_EMPTY, DS_NONEMPTY enums to make the code easier to read? thanks, Pádraig --------------J2hg0xkwIaj0VRNYM1lvUs86 Content-Type: text/x-patch; charset=UTF-8; name="rm-use-constants.patch" Content-Disposition: attachment; filename="rm-use-constants.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IGQxYzQwMGU2Ny4uN2Y0ZWFiOTIxIDEw MDY0NAotLS0gYS9ORVdTCisrKyBiL05FV1MKQEAgLTYwLDYgKzYwLDEwIEBAIEdOVSBjb3Jl dXRpbHMgTkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvdXRs aW5lIC0qLQogICBkYXRlIC0tZGVidWcgbm93IGRpYWdub3NlcyBpZiBtdWx0aXBsZSAtLWRh dGUgb3IgLS1zZXQgb3B0aW9ucyBhcmUKICAgc3BlY2lmaWVkLCBhcyBvbmx5IHRoZSBsYXN0 IHNwZWNpZmllZCBpcyBzaWduaWZpY2FudCBpbiB0aGF0IGNhc2UuCiAKKyAgcm0gb3V0cHV0 cyBtb3JlIGFjY3VyYXRlIGRpYWdub3N0aWNzIGluIHRoZSBwcmVzZW5jZSBvZiBlcnJvcnMK KyAgd2hlbiByZW1vdmluZyBkaXJlY3Rvcmllcy4gIEZvciBleGFtcGxlIEVJTyB3aWxsIGJl IGZhaXRoZnVsbHkKKyAgZGlhZ25vc2VkLCByYXRoZXIgdGhhbiBiZWluZyBjb25mbGF0ZWQg d2l0aCBFTk9URU1QVFkuCisKIAogKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA5 LjEgKDIwMjItMDQtMTUpIFtzdGFibGVdCiAKZGlmZiAtLWdpdCBhL3NyYy9yZW1vdmUuYyBi L3NyYy9yZW1vdmUuYwppbmRleCAwYjY3NTRiZjcuLmExOTc5NGQ1ZSAxMDA2NDQKLS0tIGEv c3JjL3JlbW92ZS5jCisrKyBiL3NyYy9yZW1vdmUuYwpAQCAtMTY0LDExICsxNjQsMTEgQEAg d3JpdGVfcHJvdGVjdGVkX25vbl9zeW1saW5rIChpbnQgZmRfY3dkLAogICAgVGhpcyBpcyAt MSBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LCAwIGlmIGl0IGlzIG5vbmVtcHR5LAogICAg YW5kIGEgcG9zaXRpdmUgZXJyb3IgbnVtYmVyIGlmIHRoZXJlIHdhcyB0cm91YmxlIGRldGVy bWluaW5nIHRoZSBzdGF0dXMsCiAgICBlLmcuLCBpdCBpcyBub3QgYSBkaXJlY3RvcnksIG9y IHBlcm1pc3Npb25zIHByb2JsZW1zLCBvciBJL08gZXJyb3JzLgotICAgVXNlICpESVJfU1RB VFVTIGlzIGEgY2FjaGUgZm9yIHRoZSBzdGF0dXMuICAqLworICAgVXNlICpESVJfU1RBVFVT IGFzIGEgY2FjaGUgZm9yIHRoZSBzdGF0dXMuICAqLwogc3RhdGljIGludAogZ2V0X2Rpcl9z dGF0dXMgKEZUUyBjb25zdCAqZnRzLCBGVFNFTlQgY29uc3QgKmVudCwgaW50ICpkaXJfc3Rh dHVzKQogewotICBpZiAoKmRpcl9zdGF0dXMgPCAtMSkKKyAgaWYgKCpkaXJfc3RhdHVzID09 IERTX1VOS05PV04pCiAgICAgKmRpcl9zdGF0dXMgPSBkaXJlY3Rvcnlfc3RhdHVzIChmdHMt PmZ0c19jd2RfZmQsIGVudC0+ZnRzX2FjY3BhdGgpOwogICByZXR1cm4gKmRpcl9zdGF0dXM7 CiB9CkBAIC0yNTQsNyArMjU0LDcgQEAgcHJvbXB0IChGVFMgY29uc3QgKmZ0cywgRlRTRU5U IGNvbnN0ICplbnQsIGJvb2wgaXNfZGlyLAogICAgICAgICAgICAgICAgIHByb21wdGluZyB0 aGUgdXNlciAgKi8KICAgICAgICAgICAgIGlmICggISAoeC0+cmVjdXJzaXZlCiAgICAgICAg ICAgICAgICAgICAgIHx8ICh4LT5yZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMKLSAgICAgICAg ICAgICAgICAgICAgICAgICYmIGdldF9kaXJfc3RhdHVzIChmdHMsIGVudCwgZGlyX3N0YXR1 cykgPCAwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZXRfZGlyX3N0YXR1cyAo ZnRzLCBlbnQsIGRpcl9zdGF0dXMpID09IERTX0VNUFRZKSkpCiAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICB3cml0ZV9wcm90ZWN0ZWQgPSAtMTsKICAgICAgICAgICAgICAg ICB3cF9lcnJubyA9ICpkaXJfc3RhdHVzIDw9IDAgPyBFSVNESVIgOiAqZGlyX3N0YXR1czsK QEAgLTI3Myw3ICsyNzMsNyBAQCBwcm9tcHQgKEZUUyBjb25zdCAqZnRzLCBGVFNFTlQgY29u c3QgKmVudCwgYm9vbCBpc19kaXIsCiAgICAgICAvKiBJc3N1ZSB0aGUgcHJvbXB0LiAgKi8K ICAgICAgIGlmIChkaXJlbnRfdHlwZSA9PSBEVF9ESVIKICAgICAgICAgICAmJiBtb2RlID09 IFBBX0RFU0NFTkRfSU5UT19ESVIKLSAgICAgICAgICAmJiBnZXRfZGlyX3N0YXR1cyAoZnRz LCBlbnQsIGRpcl9zdGF0dXMpID09IDApCisgICAgICAgICAgJiYgZ2V0X2Rpcl9zdGF0dXMg KGZ0cywgZW50LCBkaXJfc3RhdHVzKSA9PSBEU19OT05FTVBUWSkKICAgICAgICAgZnByaW50 ZiAoc3RkZXJyLAogICAgICAgICAgICAgICAgICAod3JpdGVfcHJvdGVjdGVkCiAgICAgICAg ICAgICAgICAgICA/IF8oIiVzOiBkZXNjZW5kIGludG8gd3JpdGUtcHJvdGVjdGVkIGRpcmVj dG9yeSAlcz8gIikKQEAgLTQyNywxNCArNDI3LDE0IEBAIGV4Y2lzZSAoRlRTICpmdHMsIEZU U0VOVCAqZW50LCBzdHJ1Y3Qgcm1fb3B0aW9ucyBjb25zdCAqeCwgYm9vbCBpc19kaXIpCiBz dGF0aWMgZW51bSBSTV9zdGF0dXMKIHJtX2Z0cyAoRlRTICpmdHMsIEZUU0VOVCAqZW50LCBz dHJ1Y3Qgcm1fb3B0aW9ucyBjb25zdCAqeCkKIHsKLSAgaW50IGRpcl9zdGF0dXMgPSAtMjsK KyAgaW50IGRpcl9zdGF0dXMgPSBEU19VTktOT1dOOwogCiAgIHN3aXRjaCAoZW50LT5mdHNf aW5mbykKICAgICB7CiAgICAgY2FzZSBGVFNfRDoJCQkvKiBwcmVvcmRlciBkaXJlY3Rvcnkg Ki8KICAgICAgIGlmICghIHgtPnJlY3Vyc2l2ZQogICAgICAgICAgICYmICEoeC0+cmVtb3Zl X2VtcHR5X2RpcmVjdG9yaWVzCi0gICAgICAgICAgICAgICAmJiBnZXRfZGlyX3N0YXR1cyAo ZnRzLCBlbnQsICZkaXJfc3RhdHVzKSA8IDApKQorICAgICAgICAgICAgICAgJiYgZ2V0X2Rp cl9zdGF0dXMgKGZ0cywgZW50LCAmZGlyX3N0YXR1cykgPT0gRFNfRU1QVFkpKQogICAgICAg ICB7CiAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgZmlyc3QgKHByZS1vcmRlcikgZW5jb3Vu dGVyIHdpdGggYSBkaXJlY3RvcnkKICAgICAgICAgICAgICB0aGF0IHdlIGNhbm5vdCBkZWxl dGUuCkBAIC01MTIsNyArNTEyLDcgQEAgcm1fZnRzIChGVFMgKmZ0cywgRlRTRU5UICplbnQs IHN0cnVjdCBybV9vcHRpb25zIGNvbnN0ICp4KQogICAgICAgICBlbnVtIFJNX3N0YXR1cyBz ID0gcHJvbXB0IChmdHMsIGVudCwgdHJ1ZSAvKmlzX2RpciovLCB4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQV9ERVNDRU5EX0lOVE9fRElSLCAmZGlyX3N0YXR1 cyk7CiAKLSAgICAgICAgaWYgKHMgPT0gUk1fVVNFUl9BQ0NFUFRFRCAmJiBkaXJfc3RhdHVz ID09IC0xKQorICAgICAgICBpZiAocyA9PSBSTV9VU0VSX0FDQ0VQVEVEICYmIGRpcl9zdGF0 dXMgPT0gRFNfRU1QVFkpCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogV2hlbiB3ZSBr bm93IChmcm9tIHByb21wdCB3aGVuIGluIGludGVyYWN0aXZlIG1vZGUpCiAgICAgICAgICAg ICAgICB0aGF0IHRoaXMgaXMgYW4gZW1wdHkgZGlyZWN0b3J5LCBkb24ndCBwcm9tcHQgdHdp Y2UuICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3N5c3RlbS5oIGIvc3JjL3N5c3RlbS5oCmluZGV4 IDkxMjI4ZWMxMy4uYzYzYjY2NzQxIDEwMDY0NAotLS0gYS9zcmMvc3lzdGVtLmgKKysrIGIv c3JjL3N5c3RlbS5oCkBAIC0yOTEsNiArMjkxLDExIEBAIHJlYWRkaXJfaWdub3JpbmdfZG90 X2FuZF9kb3Rkb3QgKERJUiAqZGlycCkKICAgIDAgaWYgRElSIGlzIGEgbm9uZW1wdHkgZGly ZWN0b3J5LAogICAgYW5kIGEgcG9zaXRpdmUgZXJyb3IgbnVtYmVyIGlmIHRoZXJlIHdhcyB0 cm91YmxlIGRldGVybWluaW5nCiAgICB3aGV0aGVyIERJUiBpcyBhbiBlbXB0eSBvciBub25l bXB0eSBkaXJlY3RvcnkuICAqLworZW51bSB7CisgICAgRFNfVU5LTk9XTiA9IC0yLAorICAg IERTX0VNUFRZID0gLTEsCisgICAgRFNfTk9ORU1QVFkgPSAwLAorfTsKIHN0YXRpYyBpbmxp bmUgaW50CiBkaXJlY3Rvcnlfc3RhdHVzIChpbnQgZmRfY3dkLCBjaGFyIGNvbnN0ICpkaXIp CiB7CkBAIC0zMTYsNyArMzIxLDcgQEAgZGlyZWN0b3J5X3N0YXR1cyAoaW50IGZkX2N3ZCwg Y2hhciBjb25zdCAqZGlyKQogICBub19kaXJlbnRyaWVzID0gIXJlYWRkaXJfaWdub3Jpbmdf ZG90X2FuZF9kb3Rkb3QgKGRpcnApOwogICBzYXZlZF9lcnJubyA9IGVycm5vOwogICBjbG9z ZWRpciAoZGlycCk7Ci0gIHJldHVybiBub19kaXJlbnRyaWVzICYmIHNhdmVkX2Vycm5vID09 IDAgPyAtMSA6IHNhdmVkX2Vycm5vOworICByZXR1cm4gbm9fZGlyZW50cmllcyAmJiBzYXZl ZF9lcnJubyA9PSAwID8gRFNfRU1QVFkgOiBzYXZlZF9lcnJubzsKIH0KIAogLyogRmFjdG9y IG91dCBzb21lIG9mIHRoZSBjb21tb24gLS1oZWxwIGFuZCAtLXZlcnNpb24gcHJvY2Vzc2lu ZyBjb2RlLiAgKi8K --------------J2hg0xkwIaj0VRNYM1lvUs86-- From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 25 21:38:04 2022 Received: (at 58050) by debbugs.gnu.org; 26 Sep 2022 01:38:04 +0000 Received: from localhost ([127.0.0.1]:48787 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocd4M-0005UN-34 for submit@debbugs.gnu.org; Sun, 25 Sep 2022 21:38:04 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:51264) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ocd4H-0005Tq-F1 for 58050@debbugs.gnu.org; Sun, 25 Sep 2022 21:38:01 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 1EC1B160093; Sun, 25 Sep 2022 18:37:51 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id s4D32uzfASEG; Sun, 25 Sep 2022 18:37:50 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 4067516009C; Sun, 25 Sep 2022 18:37:50 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.9.2 zimbra.cs.ucla.edu 4067516009C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=78364E5A-2AF3-11ED-87FA-8298ECA2D365; t=1664156270; bh=L7PrWKPM2wdnS3jnBbI8IUPvfvwqog9hjNjUOP64SWY=; h=Content-Type:Message-ID:Date:MIME-Version:To:From:Subject; b=FdR/XimJmokL43WfeJ2OIcgxUlpijO4GsxRCnWCfzJ/Z5QXlqtfyX4eVOiCtLNMpV dwsrmxh2OIMcHkukR4DzbuMq3Ip/0tb7a7vZ4yQOcjiMsXaB7mGKdatrBkcOyPZORk yr15HWISCipNnR69deRoRYFL9KbpwOkjNrlE2p+Q= X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id YokZHwusKEjB; Sun, 25 Sep 2022 18:37:50 -0700 (PDT) Received: from [192.168.1.9] (cpe-172-91-119-151.socal.res.rr.com [172.91.119.151]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 0F49C160093; Sun, 25 Sep 2022 18:37:50 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------fjLdH5BM8rIdD8Trv1KYKB4w" Message-ID: Date: Sun, 25 Sep 2022 18:37:49 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: =?UTF-8?Q?P=c3=a1draig_Brady?= References: <20220924233750.417348-1-eggert@cs.ucla.edu> <01798ae1-a76f-d3f4-fa4f-983608e5214e@draigBrady.com> From: Paul Eggert Organization: UCLA Computer Science Department Subject: Re: bug#58050: [INSTALLED] rm: fix diagnostics on I/O error In-Reply-To: <01798ae1-a76f-d3f4-fa4f-983608e5214e@draigBrady.com> X-Spam-Score: -4.1 (----) X-Debbugs-Envelope-To: 58050 Cc: 58050@debbugs.gnu.org, Gnulib bugs X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.1 (-----) This is a multi-part message in MIME format. --------------fjLdH5BM8rIdD8Trv1KYKB4w Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 9/25/22 07:25, P=C3=A1draig Brady wrote: > How about the attached to add a NEWS entry, > and add DS_EMPTY, DS_NONEMPTY enums to make the code easier to read? Sure, that looks good; thanks. Oh, I forgot that via code inspection I found a theoretical portability=20 bug in fts while I was looking into Bug#58050. I fixed that by=20 installing the attached into Gnulib. --------------fjLdH5BM8rIdD8Trv1KYKB4w Content-Type: text/x-patch; charset=UTF-8; name="0001-fts-fix-errno-handling-if-dirfd-fails.patch" Content-Disposition: attachment; filename="0001-fts-fix-errno-handling-if-dirfd-fails.patch" Content-Transfer-Encoding: base64 RnJvbSBlMDBkZTYwNGZkNzAxMmZkOTEyZjc1ODBjZDY1OGVkOTM2M2VkNmFkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDI1IFNlcCAyMDIyIDE4OjMzOjQ5IC0wNzAwClN1YmplY3Q6IFtQQVRD SF0gZnRzOiBmaXggZXJybm8gaGFuZGxpbmcgaWYgZGlyZmQgZmFpbHMKTUlNRS1WZXJzaW9u OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQt VHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCiogbGliL2Z0cy5jIChmdHNfYnVpbGQpOiBVc2Ug cHJvcGVyIGVycm5vIGlmIGRpcmZkIGZhaWxlZC4KQWx0aG91Z2ggSSBkb27igJl0IGtub3cg b2YgYW55IHBsYXRmb3JtIHdoZXJlIGRpcmZkIGNhbiBmYWlsIGhlcmUsCndlIG1pZ2h0IGFz IHdlbGwgZ2V0IGl0IHJpZ2h0LgotLS0KIENoYW5nZUxvZyB8IDcgKysrKysrKwogbGliL2Z0 cy5jIHwgMyArKy0KIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDI0NTUz NDQ1ZjYuLjYwMjdlNWVkOTQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VM b2cKQEAgLTEsMyArMSwxMCBAQAorMjAyMi0wOS0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRA Y3MudWNsYS5lZHU+CisKKwlmdHM6IGZpeCBlcnJubyBoYW5kbGluZyBpZiBkaXJmZCBmYWls cworCSogbGliL2Z0cy5jIChmdHNfYnVpbGQpOiBVc2UgcHJvcGVyIGVycm5vIGlmIGRpcmZk IGZhaWxlZC4KKwlBbHRob3VnaCBJIGRvbuKAmXQga25vdyBvZiBhbnkgcGxhdGZvcm0gd2hl cmUgZGlyZmQgY2FuIGZhaWwgaGVyZSwKKwl3ZSBtaWdodCBhcyB3ZWxsIGdldCBpdCByaWdo dC4KKwogMjAyMi0wOS0yNSAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AY2xpc3Aub3JnPgogCiAJ c3RkYm9vbDogTW9zdGx5IHJldmVydCBsYXN0IHBhdGNoLgpkaWZmIC0tZ2l0IGEvbGliL2Z0 cy5jIGIvbGliL2Z0cy5jCmluZGV4IDk1NGNiYjdiNDAuLjU4MTFmNmVhMjAgMTAwNjQ0Ci0t LSBhL2xpYi9mdHMuYworKysgYi9saWIvZnRzLmMKQEAgLTEyOTAsMTEgKzEyOTAsMTIgQEAg ZnRzX2J1aWxkIChyZWdpc3RlciBGVFMgKnNwLCBpbnQgdHlwZSkKICAgICAgICAgICAgIGRp cl9mZCA9IGRpcmZkIChkcCk7CiAgICAgICAgICAgICBpZiAoZGlyX2ZkIDwgMCkKICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBkaXJmZF9lcnJubyA9IGVycm5vOwog ICAgICAgICAgICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhciAoY3VyLT5mdHNfZGlycCk7CiAg ICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQlJFQUQpCiAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfRE5SOwotICAgICAg ICAgICAgICAgICAgICBjdXItPmZ0c19lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAg ICAgICBjdXItPmZ0c19lcnJubyA9IGRpcmZkX2Vycm5vOwogICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICB9Ci0tIAoy LjM3LjMKCg== --------------fjLdH5BM8rIdD8Trv1KYKB4w-- From unknown Thu Jun 19 14:08:06 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 24 Oct 2022 11:24:08 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator