From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752619AbdKJMul (ORCPT ); Fri, 10 Nov 2017 07:50:41 -0500 Received: from mout.web.de ([212.227.15.4]:55242 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751018AbdKJMuj (ORCPT ); Fri, 10 Nov 2017 07:50:39 -0500 Subject: [PATCH 4/4] ASN.1: Use common error handling code in main() From: SF Markus Elfring To: kernel-janitors@vger.kernel.org, Andrew Morton Cc: LKML References: <960a8501-03b0-95d9-c2bf-4633e48e73a6@users.sourceforge.net> Message-ID: <2dc2d07b-b816-c8fa-9e18-a9b2f0c33d61@users.sourceforge.net> Date: Fri, 10 Nov 2017 13:50:31 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <960a8501-03b0-95d9-c2bf-4633e48e73a6@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:QiavBjbuMM61kUS9zBILqQHYVmN5V2YYg7+Oqp3NJp39xRckpIH zdAfmodewY0JpZ3mAa9Eam13JvbEksaTq9Vpdzew/fFAT05MOgdCkhexm7rjT+wHkEIGL3a P5+gX35smGzGnCwiqHUkZKRJbOJj5h3OCjO0xDi9cK67TBYzqN7QXsx/VpdaIBoQw7yIvGX ZK8aytC3nqTnnqu1pGijA== X-UI-Out-Filterresults: notjunk:1;V01:K0:017HwJvb1GA=:QXeRhdi0V+WqLkW7C2cHN3 EJ2KkBJXXbCit2K89VeOYWwy7Hz2Pcj2SDTqrCSEBjT78F/0FISAY7EKlHzIzkYaVC2A2xlSB IHMW1LGRJsjS58Rny3Y5X/RAaWbrEzJB+poUWaWGb1dqec9Xte+yYkncfoHcQzRWMM5Qkj4L7 yIAc7j1EQ/m6KPp9qEayuqZpTu2Tqk+eR2BSCS585eZmRoQKliGagfLnAmGs4v8wGy6Yo1JWS 4beEcVvq9AXJTK08gE0X7D1qieSOyrs1+CWebJW+rv/5scB2LooG/Li3+r7cPwdOnsKLBoxbX O+/PVh7M5hVV5u+3tpn3UylLCJ35hLiB7UKDZiSbX1izmCaXkTpXKRMuG3ElHiuyLAiWzJ95O os04/ilV5T55+ZBX13HzSdny+co2VPshkiCprg/7dgXFJ46K4eKFRUOGkD7thXbU/J3vADzMG GTzj7hPqQcShoig+9+JS3XqrHLYz9khe3a2rwVwSwyntWq2/exUD+O+F/XNkWcK5jyjaezBYK Ern2hpYaNQDdvtBGuAY79LIaYZ+nMgpw8+v/0biam2C/JVsNHEyyBVz4CjZkOpFr9k/c/+8Rg 4gEMn9sEo/QTZgjMaUxPQvE0S97xai3s7SAudFz+CBT+eiaU3M1NVtH4claTVV6cD0Vah2tW3 tH4jRD5s9s55btkay6m0qa+cVtfp4ugwbelfz2A1XU4bK9wirkmOEJRbWNCnPzJCbA0HBYDj+ x9Ko7iKEqYPPwU//+Mudaa5tzafjq3G+gfZk+a5nH1wsan8+rb4z6rOsmu7/8zOPd1seSkmF5 Gn0hDkXeT+QehGhGJZnBSZXNkOoHWVDoT41xs2eXjS5GgdkLtc= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Fri, 10 Nov 2017 13:31:22 +0100 * Add jump targets so that a bit of exception handling can be better reused in this function implementation. * Replace ten calls of the function "exit" by goto statements. * Replace two function calls by return statements. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- scripts/asn1_compiler.c | 66 ++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/scripts/asn1_compiler.c b/scripts/asn1_compiler.c index 06dc5397d8c8..4df8d0b85d3c 100644 --- a/scripts/asn1_compiler.c +++ b/scripts/asn1_compiler.c @@ -568,6 +568,7 @@ int main(int argc, char **argv) FILE *out, *hdr; char *buffer, *p; char *kbuild_verbose; + char const *hint; int fd; kbuild_verbose = getenv("KBUILD_VERBOSE"); @@ -588,7 +589,7 @@ int main(int argc, char **argv) if (argc != 4) { fprintf(stderr, "Format: %s [-v] [-d] \n", argv[0]); - exit(2); + return 2; } filename = argv[1]; @@ -596,44 +597,39 @@ int main(int argc, char **argv) headername = argv[3]; fd = open(filename, O_RDONLY); - if (fd < 0) { - perror(filename); - exit(1); - } + if (fd < 0) + goto report_file_failure; - if (fstat(fd, &st) < 0) { - perror(filename); - exit(1); - } + if (fstat(fd, &st) < 0) + goto report_file_failure; buffer = malloc(st.st_size + 1); if (!buffer) { - perror(NULL); - exit(1); + hint = NULL; + goto report_failure; } readlen = read(fd, buffer, st.st_size); - if (readlen < 0) { - perror(filename); - exit(1); - } + if (readlen < 0) + goto report_file_failure; if (close(fd) < 0) { - perror(filename); - exit(1); +report_file_failure: + hint = filename; + goto report_failure; } if (readlen != st.st_size) { fprintf(stderr, "%s: Short read\n", filename); - exit(1); + return 1; } p = strrchr(argv[1], '/'); p = p ? p + 1 : argv[1]; grammar_name = strdup(p); if (!p) { - perror(NULL); - exit(1); + hint = NULL; + goto report_failure; } p = strchr(grammar_name, '.'); if (p) @@ -646,30 +642,32 @@ int main(int argc, char **argv) dump_elements(); out = fopen(outputname, "w"); - if (!out) { - perror(outputname); - exit(1); - } + if (!out) + goto report_output_failure; hdr = fopen(headername, "w"); - if (!hdr) { - perror(headername); - exit(1); - } + if (!hdr) + goto report_header_failure; render(out, hdr); - if (fclose(out) < 0) { - perror(outputname); - exit(1); + if (fclose(hdr) < 0) { +report_header_failure: + hint = headername; + goto report_failure; } - if (fclose(hdr) < 0) { - perror(headername); - exit(1); + if (fclose(out) < 0) { +report_output_failure: + hint = outputname; + goto report_failure; } return 0; + +report_failure: + perror(hint); + return 1; } enum compound { -- 2.15.0