From patchwork Tue Jan 26 13:14:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Adler X-Patchwork-Id: 1431673 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::23f; helo=mail-lj1-x23f.google.com; envelope-from=swupdate+bncbclp7i7wwmhrbt5mycaamgqeeip5nka@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=gZbhOsg5; dkim-atps=neutral Received: from mail-lj1-x23f.google.com (mail-lj1-x23f.google.com [IPv6:2a00:1450:4864:20::23f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DQ6hf3185z9s1l for ; Wed, 27 Jan 2021 00:17:06 +1100 (AEDT) Received: by mail-lj1-x23f.google.com with SMTP id b26sf8063622lje.13 for ; Tue, 26 Jan 2021 05:17:06 -0800 (PST) ARC-Seal: i=3; a=rsa-sha256; t=1611667023; cv=pass; d=google.com; s=arc-20160816; b=fQI5lucxeedRNAUen64oWrVAwNVtZawjceeHiWDmkn1oKKS/fZBh58blb98xjVTB+w H2veCv+pgPS7K72M+Otoxb9npGKq6STN78ypvBKKZN9KIIw2xBQHgulDUQXW6Anr4FyL ZyG2pMZwJQTaJ3jEU7z1OU+wt171/nAyXmoEN/dIdm/yh6yO018sxT3UqV4vBCXDTFF2 gVEJF8I41IKia1Po+szu9WlXHg3y+STPdq6COIfbJ+fLF6Ks+r7+Wc75PV3ogSdWV+xl VDdbNODWeDBEmr2p1OFQiVuXKaJRG+J8ZttG8S0BLp7jJWtsDJhphdWNT6+rUqn9MqXa cKyg== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:dkim-signature; bh=UKta3JH2CqVNOOXIm/Rj1HBIIhTluc+scRDC9EVzVAk=; b=jb+K/W4XCczTNt4MF540DKIxG3TLSfb9/ka5EUdkIh+xb6Ylt037R3zuKbaVzKyOk8 Q5pQrLLwgBspDbZbsYAFLlACpjnwnj41ETSJuxnUAmVjOSlHWrASnLSv+pm0JGPNW7Kr rsAAUk73pwKFTmWHZvUSgUUbTkf/yysy0kKzTjmLDE05HRxNsjYEyfsA0oaDhqprFs+c u7FvGklD6xYc0gYxedasPr8git1AUgLqHiEn9k8elw778eHoTPR/Gvzar4Sy4od5aA9A S4CuVWYeMNYhT5LeES20u/M2AYJrz1JI1/pj6ehzxpQenmSLszWg8xQ7MuW4utcb7SPk 9lMQ== ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.onmicrosoft.com header.s=selector1-siemens-onmicrosoft-com header.b="PG53j2d/"; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=neutral (google.com: 40.107.8.73 is neither permitted nor denied by best guess record for domain of michael.adler@siemens.com) smtp.mailfrom=michael.adler@siemens.com; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=UKta3JH2CqVNOOXIm/Rj1HBIIhTluc+scRDC9EVzVAk=; b=gZbhOsg50kYQh4dQhmeAFNBVu3Xpll8eAkR59BrySCEODu4rgeZ5h3xdQTAvNhmTcS MmUXtXHdm9EqlbzrR2h7iY752uoG+mcmBWtYh4v9FN629EJHqbxct87X2zBp8Ojaf9f6 Rxa2aG7s6lFQhIAqVg7y4GfaeKGF7tKna9eTtHkBsZDQLON5wx1PG346Rk9GdFbTDm1N Gg0puWJyFGUIo2UVF9UA5c3pa6cwE8giXbu4HbxefNw8H2XvYiaBdu+v/8XPH30zehL+ FstGW/A+kG4wGfRA6m1OUwoCqIquVRWadgAGvrgbNu98dwFNOW9HezQSH1CI7JaFrM0b Vc6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=UKta3JH2CqVNOOXIm/Rj1HBIIhTluc+scRDC9EVzVAk=; b=GvOdzApusDkFiMdXZ5/ZweYs2v2YjrVR4hH9Ncv9qZx/srXrT4pUAt4Q/UQGF+tZpV 28GoMgRuNkub9WPsdEX7X7zao4vseWzCzwbSf16A1XWI8qiomBEvooPWKC6q6llgIoRh 0ZMu/Sd0g52U10fvulVcS3IOLG6faUImtPRxfd51AbxQFm2hGEu71bD2G+Uyn6vOfk5D RA3RZZmGwDBn1fbElJGvIrdfNn52FVJcYYyKp19/90pRdQdv26vTX3qshQSNU/sRTkKN VHf+3+mpLuekFwwnuwV6/9JyL3B/45rQZPGIkXDsmWjL+U7pMK8XfTXCA+zz7CrqcezJ 78bg== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM533LqPSVU2TyyNpRlapqAlz968yMVDRPPCpJAt3raEesklXRBonn 9iK5CjmQQLrhk2cO7JlRduU= X-Google-Smtp-Source: ABdhPJyqTE00E1HNog6fpfE4wUBaDkxRCmwWEObFlQaTeNjoO6n/UIsbVZ0myaaNoUa9XOdv3v7Zmg== X-Received: by 2002:a05:6512:130f:: with SMTP id x15mr2719024lfu.259.1611667023625; Tue, 26 Jan 2021 05:17:03 -0800 (PST) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a2e:974c:: with SMTP id f12ls658879ljj.8.gmail; Tue, 26 Jan 2021 05:17:02 -0800 (PST) X-Received: by 2002:a05:651c:39c:: with SMTP id e28mr2903863ljp.81.1611667022757; Tue, 26 Jan 2021 05:17:02 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1611667022; cv=pass; d=google.com; s=arc-20160816; b=C7Ayb0tuJIBM7uksMnP2wbZEzmYI2ZMVqkxMgvUMafu2SzhQRceZ2fj7Qrylo93o56 PYtlTCIPrDAxUOGjls8SvChuFSiK3nr2PMRiSYrv4Ko0m7T6xOlMREXLtS9E3o5n7O4N EAheOTSlp8O5hEaLoQlpZJ6Be3QFOzQW85axTLFS/AtrNRtUIL1//5f1RhxRIO5KNxwO EWRlqIrY42ow2oV0mC34u+uWqu4Yl/BBKAz6I9OcAVK79/3G4QX+DUF6d2aqMMwKegtT l9IQXb1CVojxLvH8Cwt1CVoqVTZ9kleWyKbYaeqo2QtiMNy6DO2BdOTopQX9su418WNW g1bA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-transfer-encoding:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=saPfJ/Sr7k/GEfoUM8kbza8bfGVMPpumaZ2xj3DXiGU=; b=dZQmPps/4dhUkBTN4R6eHKYGMUe9S2rGNqgV1pMDR/FBTd3yVKQmjNDebU8bHFWZb5 3awrsx1sLMPx0/3ao1Syd1UFjzCnothUsgRMZ46SU3pSBkK/mnuTUasLYg5NAWuBI5Eh D67PlqblBuHPk3xbkudqcsQhtSiixUOGByfzSGJlbStadmHvVJ4BezG5W2AF5byR0ZVu lZ4WSS9bo0sy19wxbgoHI+MlXmGROoSSzgW5CQcDW04Mc/fBgS8d5RershQEicruOWYV EO4BDZlaoJdGLlJskgTNj2r9gzJCBXTBH46nEiIDhwXbwPl7XddDuDOaqOjVITNBxOk6 o+BQ== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.onmicrosoft.com header.s=selector1-siemens-onmicrosoft-com header.b="PG53j2d/"; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=neutral (google.com: 40.107.8.73 is neither permitted nor denied by best guess record for domain of michael.adler@siemens.com) smtp.mailfrom=michael.adler@siemens.com; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80073.outbound.protection.outlook.com. [40.107.8.73]) by gmr-mx.google.com with ESMTPS id h13si759848lji.7.2021.01.26.05.17.02 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Jan 2021 05:17:02 -0800 (PST) Received-SPF: neutral (google.com: 40.107.8.73 is neither permitted nor denied by best guess record for domain of michael.adler@siemens.com) client-ip=40.107.8.73; ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Jwc75bnz3S1oaA8Og8AmLFaEbeq4jS8qMfmNxlerYeOrNfNjastbwkpZ17fIeTE68ebmLEaJBzkZRcnPHi4rsmUJy8/Rh2kT1zf+grOdVKAVaNPF9tzbJK6MNWlIYy8jBK4GPha24Pl3pnPJ+8klccct2SSZ4zQyXCfHT+4j1WS39CfuBN2GT27tRSOku+tVULjVnT7VO9N+igTA4nGh1asUziL4EI1QCUcLV+PfJ8v6KzeO/NHS6i6HD+PxYtAgKiuKyl81IRLWXelh8pUqytQKvlffMwfeQGQJanyOQP/XlKlKZVWZdvxiykc3awCzxokH9Ij3CHtJfW5O+uv2zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=saPfJ/Sr7k/GEfoUM8kbza8bfGVMPpumaZ2xj3DXiGU=; b=M5UIiV9qErC+P6q35VYaSBs37xsTvj6ddW7nYb3/FOvyygdygpK3ioKK8hpRDkUH//YM+MCzMwr4dajSPD5XADie8z2k/a9HXbFD3/YBCMB8LAyl+yVHYu3RYPFBM1nFEapGwrJGBSS/y1D9D+OSwv+NCwGDCuYqjyAhuh6RttMNyZRVbKBOef8c0gapNallAribazl/TjJp550joHvFIcQz08zhtsdJMQ/Ne/JytvSqTxMEZ9/uvt0/fZYqJUEUcjTaYhISxfhm318IiyYnm6qy1vLmkqwa8HKkTI47mR+zeWmIajVQJssmve5sKDjDXdan7vQjGdy5K3We+BRYwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none Received: from AM0PR10MB2322.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:d7::22) by AM0PR10MB3603.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:156::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.17; Tue, 26 Jan 2021 13:17:01 +0000 Received: from AM0PR10MB2322.EURPRD10.PROD.OUTLOOK.COM ([fe80::2838:c46a:e3fe:2c7a]) by AM0PR10MB2322.EURPRD10.PROD.OUTLOOK.COM ([fe80::2838:c46a:e3fe:2c7a%4]) with mapi id 15.20.3784.019; Tue, 26 Jan 2021 13:17:01 +0000 From: Michael Adler To: swupdate@googlegroups.com Cc: Michael Adler , Christian Storm Subject: [swupdate] [PATCH 5/9] Avoid re-opening and re-reading config file Date: Tue, 26 Jan 2021 14:14:08 +0100 Message-Id: <20210126131412.3567-6-michael.adler@siemens.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210126131412.3567-1-michael.adler@siemens.com> References: <20210126131412.3567-1-michael.adler@siemens.com> X-Originating-IP: [93.104.69.78] X-ClientProxiedBy: AM0P190CA0026.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::36) To AM0PR10MB2322.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:d7::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost (93.104.69.78) by AM0P190CA0026.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.12 via Frontend Transport; Tue, 26 Jan 2021 13:17:01 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 784cad85-fef2-4449-3f5c-08d8c1fcaab0 X-MS-TrafficTypeDiagnostic: AM0PR10MB3603: X-LD-Processed: 38ae3bcd-9579-4fd4-adda-b42e1495d55a,ExtAddr X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:792; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lSmYWKWSvCZKO/67EbQ1ER20W1aEStH1CnHuPnC97QWrv6VITi8p74HWXNmuSHiiLzDWu0Njk9sOeEIH1ORH+NQeF0fkHUTZH+lka6EuVCNEX70Ov3MpwmiEVYG/rfm26oRWRy4rtQLLY/2MlDnue55VikKvYOAhlxsxibxCWYm6ogVW5r1LuSXoJxqFV3TdJHw+toaKHG6s0SuzrsVMNjzl/2fx+ljeoOkYgYH61OvZ/MVTU9Ctq5w0sS8eMGZJohwaZv17rixH7QA2iYnSmgOw3n6vQ6tipKNL0SYioMjhqZlz4eY7LyHe4DcMtYnzVPlF0+YxMDFkIWh8Hp5NWT7Im/0gW7RpqJvm3UgrmxgxmdE0qBE2xaSwCnjMYRTD3blQIDuI7//L6w7nejNWQQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR10MB2322.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(376002)(396003)(346002)(366004)(54906003)(8676002)(66476007)(316002)(6486002)(6916009)(36756003)(8936002)(83380400001)(66946007)(478600001)(86362001)(6496006)(44832011)(186003)(4326008)(956004)(2616005)(2906002)(107886003)(1076003)(16526019)(26005)(66556008)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: wgh/vxc5n7wDF0nGAp+n9LEH9dM0ieECfGNnnheJrKKBWP/xD/Zm4Ly1gdXNEdDBLlkJgDF/hH2gzB18RIZxbNrHhwOqZuXKv+OC3L4E0UvHSLhr+wgDUYiTUmtQBvvTBD87kZCTaJwBdTgHJdrWynjkxSgA7OGkSelqidWC8BD2tG0zdmmeK2Rp4hPbKfP8BmqGYeRN7lC8kCtf7xuOyvxySEeGKyhQGLJnchXsZYqypihaANmibREvg2VEQVN5fgPnkpZSEJ2iZI7HKzvtZXHiy5BWGhGSzn3HJqa7xQ3H06hdEGfF0xCWIqVYnu7Z+P1Z3YLO2i0OcVdU/P2O3QcbnvfrnZoiLqXbfSQGO0bypJEFAT6fJPGoKgW8eO0waBQrUy9hGZJ+33MUtgm2ASx99TjHXXAB/0PDUwHLW7/O399av8Jwv0a805Jju1fVR3rT4ntGC+tnRD8RVRyHfYYVQb/YkRUwTChh78OAki6MVgWmpmGkTu8J8eRk9HbFRlfvNAWTOOv2qAsQ62jbKlL7xtii5pskYVvILYHXdlmBLJFcVjGa9mSUA0MtDT4qmMB9Y2zLQ8EXm4+4UhTt5X/emrD4d1FJSz3xQ4aTwEW43+wpyDcFbRLux6q8RuTntak4oGOJNLp5tjZq61+IXYWo/SUqidBKp8iuGXZUafk2g+exTCf5YUDhp7isW698h81qhHM1uX0oN69uA4B14qFft8LLxP/AMlLWQ9by3YzoiGGZuWGnJR+ZBRe8sHsV+SGR0diBKSpfS+4VmAzJcOmNa7NyCENPYt6bI45+lFt+C7Yk55t9/WZKTt5o+tMLrLptF58P11ygdDjYCDmloFStBsueFG97Oy2HowCbEF2lypRUrRTmqYAG1GdyEqmycXil6X6ZjR3agcxizGoZ2B/s99oMu8LAzNPEM0V41KKXXiDTYHFOgawie0651kcXgwF7WM7fh7FVmvnSUF/MflGDRuo+D1lbBbHg/Z9U0Jfrx4gZ2ldevNMZntIflhEGKHCsgnp8MkAvvTAAMfTCfQ5Lvijq4g2Tw/kVJDQSNi+6NyOcTLhSURvx5S8HFAYa X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-Network-Message-Id: 784cad85-fef2-4449-3f5c-08d8c1fcaab0 X-MS-Exchange-CrossTenant-AuthSource: AM0PR10MB2322.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2021 13:17:01.3751 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7hX9NgReEluRgmJUUbOz2/iA422Np6XYBEpXcg88zy72RqDcolnHAoX7N2dsPM8B4UjJCxnsAN23Frz/lh9S2sY2oBFhQ0x6+docpAXR5eI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB3603 X-Original-Sender: Michael.Adler@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.onmicrosoft.com header.s=selector1-siemens-onmicrosoft-com header.b="PG53j2d/"; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=neutral (google.com: 40.107.8.73 is neither permitted nor denied by best guess record for domain of michael.adler@siemens.com) smtp.mailfrom=michael.adler@siemens.com; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siemens.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , During a regular startup, the config file is at least open(2)ed and read(2) four times. * New API for reading swupdate.cfg (use in-memory copy of the file) * Move settings_callback to swupdate_settings.h; it is only used there Notice: mmap(3p) was not used to avoid security issues when sharing with fork(2)ed processes which drop privileges. Signed-off-by: Michael Adler Signed-off-by: Christian Storm --- core/artifacts_versions.c | 2 +- core/swupdate.c | 16 ++++++--- corelib/swupdate_settings.c | 72 +++++++++++++++++++++++-------------- include/parselib.h | 2 -- include/swupdate_settings.h | 37 ++++++++++++++++++- 5 files changed, 94 insertions(+), 35 deletions(-) diff --git a/core/artifacts_versions.c b/core/artifacts_versions.c index 7d1d035..cba45b7 100644 --- a/core/artifacts_versions.c +++ b/core/artifacts_versions.c @@ -149,7 +149,7 @@ void get_sw_versions(char *cfgname, struct swupdate_cfg *sw) } #else -void get_sw_versions(char __attribute__ ((__unused__)) *cfgname, +void get_sw_versions(swupdate_cfg_handle __attribute__ ((__unused__))*handle, struct swupdate_cfg *sw) { read_sw_version_file(sw); diff --git a/core/swupdate.c b/core/swupdate.c index 6548d06..37eda4c 100644 --- a/core/swupdate.c +++ b/core/swupdate.c @@ -547,11 +547,16 @@ int main(int argc, char **argv) /* Load configuration file */ if (cfgfname != NULL) { + swupdate_cfg_handle handle; + int ret = swupdate_cfg_init(&handle, cfgfname); + /* * 'globals' section is mandatory if configuration file is specified. */ - int ret = read_module_settings(cfgfname, "globals", - read_globals_settings, &swcfg); + if (ret == 0) { + ret = swupdate_cfg_read_module_settings(&handle, "globals", + read_globals_settings, &swcfg); + } if (ret != 0) { /* * Exit on -ENODATA or -EINVAL errors. @@ -560,6 +565,7 @@ int main(int argc, char **argv) "Error parsing configuration file: %s, exiting.\n", ret == -ENODATA ? "'globals' section missing" : "cannot read"); + swupdate_cfg_destroy(&handle); exit(EXIT_FAILURE); } @@ -569,11 +575,13 @@ int main(int argc, char **argv) * The following sections are optional, hence -ENODATA error code is * ignored if the section is not found. -EINVAL will not happen here. */ - (void)read_module_settings(cfgfname, "logcolors", + (void)swupdate_cfg_read_module_settings(&handle, "logcolors", read_console_settings, &swcfg); - (void)read_module_settings(cfgfname, "processes", + (void)swupdate_cfg_read_module_settings(&handle, "processes", read_processes_settings, &swcfg); + + swupdate_cfg_destroy(&handle); } /* diff --git a/corelib/swupdate_settings.c b/corelib/swupdate_settings.c index de7f331..f06ecf7 100644 --- a/corelib/swupdate_settings.c +++ b/corelib/swupdate_settings.c @@ -10,6 +10,7 @@ * starting swupdate with a long list of parameters. */ +#include #include #include #include @@ -53,6 +54,9 @@ static int read_settings_file(config_t *cfg, const char *filename) { int ret; + if (!filename) + return -EINVAL; + TRACE("Reading config file %s", filename); ret = config_read_file(cfg, filename); if (ret != CONFIG_TRUE) { @@ -69,35 +73,15 @@ static int read_settings_file(config_t *cfg, const char *filename) int read_module_settings(const char *filename, const char *module, settings_callback fcn, void *data) { - config_t cfg; - config_setting_t *elem; - - if (!fcn || !filename) - return -EINVAL; - - memset(&cfg, 0, sizeof(cfg)); - config_init(&cfg); - - if (read_settings_file(&cfg, filename) != CONFIG_TRUE) { - config_destroy(&cfg); + swupdate_cfg_handle handle; + int ret = swupdate_cfg_init(&handle, filename); + if (ret == 0) { + ret = swupdate_cfg_read_module_settings(&handle, module, fcn, data); + } else { ERROR("Error reading configuration file, skipping...."); - return -EINVAL; - } - - elem = find_settings_node(&cfg, module); - - if (!elem) { - TRACE("No config settings found for module %s", module); - config_destroy(&cfg); - return -ENODATA; } - - TRACE("Reading config settings for module %s", module); - fcn(elem, data); - - config_destroy(&cfg); - - return 0; + swupdate_cfg_destroy(&handle); + return ret; } static int get_run_as(void *elem, void *data) @@ -162,3 +146,37 @@ int settings_into_dict(void *settings, void *data) return 0; } + +int swupdate_cfg_init(swupdate_cfg_handle *handle, const char *filename) +{ + config_init(&handle->cfg); + if (read_settings_file(&handle->cfg, filename) != CONFIG_TRUE) { + return -EINVAL; + } + return 0; +} + +void swupdate_cfg_destroy(swupdate_cfg_handle *handle) +{ + config_destroy(&handle->cfg); +} + +int swupdate_cfg_read_module_settings(swupdate_cfg_handle *handle, const char *module, settings_callback fcn, void *data) +{ + config_setting_t *elem; + + if (!fcn) + return -EINVAL; + + TRACE("Reading config file settings for module %s", module); + elem = find_settings_node(&handle->cfg, module); + + if (!elem) { + TRACE("No config file settings found for module %s", module); + return -ENODATA; + } + + fcn(elem, data); + + return 0; +} diff --git a/include/parselib.h b/include/parselib.h index 5cbc255..84a51e2 100644 --- a/include/parselib.h +++ b/include/parselib.h @@ -85,8 +85,6 @@ void *get_node_json(json_object *root, const char **nodes); #define get_node_json(root, nodes) (NULL) #endif -typedef int (*settings_callback)(void *elem, void *data); - const char *get_field_string(parsertype p, void *e, const char *path); void get_field_string_with_size(parsertype p, void *e, const char *path, char *d, size_t n); diff --git a/include/swupdate_settings.h b/include/swupdate_settings.h index c3b083d..c8e4f1d 100644 --- a/include/swupdate_settings.h +++ b/include/swupdate_settings.h @@ -8,12 +8,29 @@ #ifndef _SWUPDATE_SETTINGS_H #define _SWUPDATE_SETTINGS_H +#include + +typedef int (*settings_callback)(void *elem, void *data); + #ifdef CONFIG_LIBCONFIG + +#include + +typedef struct { + config_t cfg; +} swupdate_cfg_handle; + +int swupdate_cfg_init(swupdate_cfg_handle *handle, const char *filename); +void swupdate_cfg_destroy(swupdate_cfg_handle *handle); +int swupdate_cfg_read_module_settings(swupdate_cfg_handle *handle, const char *module, settings_callback fcn, void *data); + int read_module_settings(const char *filename, const char *module, settings_callback fcn, void *data); int read_settings_user_id(const char *filename, const char *module, uid_t *userid, gid_t *groupid); int settings_into_dict(void *settings, void *data); #else -#include + +typedef struct {} swupdate_cfg_handle; + static inline int read_module_settings(const char __attribute__ ((__unused__))*filename, const char __attribute__ ((__unused__)) *module, settings_callback __attribute__ ((__unused__)) fcn, @@ -40,6 +57,24 @@ static inline int settings_into_dict(void __attribute__ ((__unused__)) *settings { return -1; } + +static inline int swupdate_cfg_init(swupdate_cfg_handle __attribute__ ((__unused__))*handle, + const char __attribute__ ((__unused__))*filename) +{ + return -1; +} + +static inline void swupdate_cfg_destroy(swupdate_cfg_handle __attribute__ ((__unused__))*handle) { + return; +} + +static inline int swupdate_cfg_read_module_settings(swupdate_cfg_handle __attribute__ ((__unused__))*handle, + const char __attribute__ ((__unused__))*module, + settings_callback __attribute__ ((__unused__))fcn, + void __attribute__ ((__unused__))*data) { + return -1; +}; + #endif #endif