From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 5291F3858024 for ; Fri, 26 Mar 2021 13:01:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5291F3858024 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 72E44AB8A; Fri, 26 Mar 2021 13:01:31 +0000 (UTC) Date: Fri, 26 Mar 2021 14:01:29 +0100 From: Tom de Vries To: dwz@sourceware.org, jakub@redhat.com, mark@klomp.org Subject: [committed] Factor out {encode,decode}_child_exit_status Message-ID: <20210326130128.GA27155@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: dwz@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Dwz mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Mar 2021 13:01:33 -0000 Hi, Factor out new function encode_child_exit_status and encode_child_exit_status out of dwz_files_1. Committed to trunk. Thanks, - Tom Factor out {encode,decode}_child_exit_status 2021-03-26 Tom de Vries * dwz.c (encode_child_exit_status, decode_child_exit_status): New function, factored out of ... (dwz_files_1): ... here. --- dwz.c | 66 +++++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/dwz.c b/dwz.c index 3873158..5a1dd0f 100644 --- a/dwz.c +++ b/dwz.c @@ -16406,6 +16406,37 @@ update_hardlinks (int nr_files, char *files[], struct file_result *resa) } } +/* Encode child process exit status. */ +static int +encode_child_exit_status (int thisret, bool low_mem_p, struct file_result *res) +{ + if (thisret == 0 && low_mem_p) + thisret = 2; + assert (thisret >= 0 && thisret <= 2); + assert (res->res >= -3); + thisret = thisret + ((res->res + 3) << 2); + return thisret; +} + +/* Decode child process exit status. */ +static int +decode_child_exit_status (int state, bool *low_mem_p, struct file_result *res) +{ + int ret; + if (!WIFEXITED (state)) + error (1, 0, "Child dwz process got killed"); + ret = WEXITSTATUS (state) & 0x3; + *low_mem_p = false; + if (ret == 2) + { + ret = 0; + *low_mem_p = true; + } + res->res = (int)((WEXITSTATUS (state) & ~0x3) >> 2) - 3; + + return ret; +} + /* Dwarf-compress FILES. If HARDLINK, detect if some files are hardlinks and if so, dwarf-compress just one, and relink the others. */ static int @@ -16458,17 +16489,9 @@ dwz_files_1 (int nr_files, char *files[], bool hardlink, { int state; pid_t got_pid = waitpid (-1, &state, 0); - if (!WIFEXITED (state)) - error (1, 0, "Child dwz process got killed"); - thisret = WEXITSTATUS (state) & 0x3; - bool low_mem_p = false; - if (thisret == 2) - { - thisret = 0; - low_mem_p = true; - } - (void)low_mem_p; - res->res = (int)((WEXITSTATUS (state) & ~0x3) >> 2) - 3; + bool low_mem_p; + int thisret + = decode_child_exit_status (state, &low_mem_p, res); if (thisret == 1) ret = 1; nr_forks--; @@ -16488,13 +16511,7 @@ dwz_files_1 (int nr_files, char *files[], bool hardlink, { bool low_mem_p; thisret = dwz_with_low_mem (file, NULL, res, &low_mem_p); - /* Encode thisret, low_mem_p and res->res into return status. */ - if (thisret == 0 && low_mem_p) - thisret = 2; - assert (thisret >= 0 && thisret <= 2); - assert (res->res >= -3); - thisret = thisret + ((res->res + 3) << 2); - return thisret; + return encode_child_exit_status (thisret, low_mem_p, res); } else { @@ -16515,17 +16532,8 @@ dwz_files_1 (int nr_files, char *files[], bool hardlink, int state; pid_t got_pid = waitpid (pids[i], &state, 0); assert (got_pid == pids[i]); - if (!WIFEXITED (state)) - error (1, 0, "Child dwz process got killed"); - thisret = WEXITSTATUS (state) & 0x3; - bool low_mem_p = false; - if (thisret == 2) - { - thisret = 0; - low_mem_p = true; - } - (void)low_mem_p; - res->res = (int)((WEXITSTATUS (state) & ~0x3) >> 2) - 3; + bool low_mem_p; + thisret = decode_child_exit_status (state, &low_mem_p, res); if (thisret == 1) ret = 1; }