From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E4FFEC02182 for ; Tue, 21 Jan 2025 22:57:52 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6694B10E1FF; Tue, 21 Jan 2025 22:57:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="BUKlvhcM"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) by gabe.freedesktop.org (Postfix) with ESMTPS id F046E10E644 for ; Tue, 21 Jan 2025 22:57:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1737500272; x=1769036272; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=faz33rkTv4eChT+9iOw47HQeiHOs2B2zzvy6mEaddWs=; b=BUKlvhcMziKOU1CHppGHcVZ+io873wFf4+w35p929fUVNkv5+pNlb3SL CD/VcII//ajbjq9faTZLmaipD5vazkvy4eh6s3z6fjd2GHoJg+wjwBG5a FhPsbKvT9lGsKw2qY99OP2b1lGcsiQy5IiT+uXU0tbMXgXAOKKnKCa/ah He7GnMilyBS6TAXSQJhM0QqgHLxNmBgDr48qaF/wTE+LYc4ZhnM3kVB4z nfZAoX/GUbz+VbDyJynC9KHp18X47ot1VyWKrznAswYFETq6yKclY0TYV 2F3rEBwga0cgXt7WpxCWwPm/zolTN7rBQgHd19ByY7iAAYJZA7q2nxZXj A==; X-CSE-ConnectionGUID: 6bwkr5n9TLCH1nPClF0wYQ== X-CSE-MsgGUID: Q9dQq/W9QNWjZEPcycyXCQ== X-IronPort-AV: E=McAfee;i="6700,10204,11322"; a="55352724" X-IronPort-AV: E=Sophos;i="6.13,223,1732608000"; d="scan'208";a="55352724" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jan 2025 14:57:52 -0800 X-CSE-ConnectionGUID: ZalhbuVURxS/foMyL5RTUA== X-CSE-MsgGUID: yoPIbV9mTgKC0DlhXgsKsA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="111933669" Received: from lucas-s2600cw.jf.intel.com ([10.165.21.196]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jan 2025 14:57:52 -0800 From: Lucas De Marchi To: igt-dev@lists.freedesktop.org Cc: Gustavo Sousa , Peter Senna Tschudin , Kamil Konieczny , Ryszard Knop , Lucas De Marchi Subject: [PATCH i-g-t v2 2/7] runner/settings: Use wrapper functions for each type Date: Tue, 21 Jan 2025 14:57:28 -0800 Message-ID: <20250121225733.808978-3-lucas.demarchi@intel.com> X-Mailer: git-send-email 2.48.0 In-Reply-To: <20250121225733.808978-1-lucas.demarchi@intel.com> References: <20250121225733.808978-1-lucas.demarchi@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" Simplify assigning the variables by using wrapper functions. This avoids calling atoi() on every iteration and will allow to simplify the strdup() calls in future. Signed-off-by: Lucas De Marchi --- runner/settings.c | 74 ++++++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/runner/settings.c b/runner/settings.c index 80d95be5b..13694a51c 100644 --- a/runner/settings.c +++ b/runner/settings.c @@ -1152,43 +1152,60 @@ bool serialize_settings(struct settings *settings) #undef SERIALIZE_LINE } -bool read_settings_from_file(struct settings *settings, FILE *f) +static int parse_int(char **pval) +{ + return atoi(*pval); +} + +static unsigned long parse_ul(char **pval) +{ + return strtoul(*pval, NULL, 10); +} + +static char *parse_str(char **pval) { -#define PARSE_LINE(s, name, val, field, write) \ + return *pval ? strdup(*pval) : NULL; +} + +#define PARSE_LINE(s, name, val, field, _f) \ if (!strcmp(name, #field)) { \ - s->field = write; \ + s->field = _f(&val); \ goto cleanup; \ } +#define PARSE_INT(s, name, val, field) PARSE_LINE(s, name, val, field, parse_int) +#define PARSE_UL(s, name, val, field) PARSE_LINE(s, name, val, field, parse_ul) +#define PARSE_STR(s, name, val, field) PARSE_LINE(s, name, val, field, parse_str) +bool read_settings_from_file(struct settings *settings, FILE *f) +{ char *name = NULL, *val = NULL; settings->dmesg_warn_level = -1; while (fscanf(f, "%ms : %m[^\n]", &name, &val) == 2) { - int numval = atoi(val); - PARSE_LINE(settings, name, val, abort_mask, numval); - PARSE_LINE(settings, name, val, disk_usage_limit, strtoul(val, NULL, 10)); - PARSE_LINE(settings, name, val, test_list, val ? strdup(val) : NULL); - PARSE_LINE(settings, name, val, name, val ? strdup(val) : NULL); - PARSE_LINE(settings, name, val, dry_run, numval); - PARSE_LINE(settings, name, val, allow_non_root, numval); - PARSE_LINE(settings, name, val, facts, numval); - PARSE_LINE(settings, name, val, sync, numval); - PARSE_LINE(settings, name, val, log_level, numval); - PARSE_LINE(settings, name, val, overwrite, numval); - PARSE_LINE(settings, name, val, multiple_mode, numval); - PARSE_LINE(settings, name, val, inactivity_timeout, numval); - PARSE_LINE(settings, name, val, per_test_timeout, numval); - PARSE_LINE(settings, name, val, overall_timeout, numval); - PARSE_LINE(settings, name, val, use_watchdog, numval); - PARSE_LINE(settings, name, val, piglit_style_dmesg, numval); - PARSE_LINE(settings, name, val, dmesg_warn_level, numval); - PARSE_LINE(settings, name, val, prune_mode, numval); - PARSE_LINE(settings, name, val, test_root, val ? strdup(val) : NULL); - PARSE_LINE(settings, name, val, results_path, val ? strdup(val) : NULL); - PARSE_LINE(settings, name, val, enable_code_coverage, numval); - PARSE_LINE(settings, name, val, cov_results_per_test, numval); - PARSE_LINE(settings, name, val, code_coverage_script, val ? strdup(val) : NULL); + PARSE_INT(settings, name, val, abort_mask); + PARSE_UL(settings, name, val, disk_usage_limit); + PARSE_STR(settings, name, val, test_list); + PARSE_STR(settings, name, val, name); + PARSE_INT(settings, name, val, dry_run); + PARSE_INT(settings, name, val, allow_non_root); + PARSE_INT(settings, name, val, facts); + PARSE_INT(settings, name, val, sync); + PARSE_INT(settings, name, val, log_level); + PARSE_INT(settings, name, val, overwrite); + PARSE_INT(settings, name, val, multiple_mode); + PARSE_INT(settings, name, val, inactivity_timeout); + PARSE_INT(settings, name, val, per_test_timeout); + PARSE_INT(settings, name, val, overall_timeout); + PARSE_INT(settings, name, val, use_watchdog); + PARSE_INT(settings, name, val, piglit_style_dmesg); + PARSE_INT(settings, name, val, dmesg_warn_level); + PARSE_INT(settings, name, val, prune_mode); + PARSE_STR(settings, name, val, test_root); + PARSE_STR(settings, name, val, results_path); + PARSE_INT(settings, name, val, enable_code_coverage); + PARSE_INT(settings, name, val, cov_results_per_test); + PARSE_STR(settings, name, val, code_coverage_script); printf("Warning: Unknown field in settings file: %s = %s\n", name, val); @@ -1210,9 +1227,8 @@ cleanup: free(val); return true; - -#undef PARSE_LINE } +#undef PARSE_LINE /** * read_env_vars_from_file() - load env vars from a file -- 2.48.0