From patchwork Fri Mar 15 09:25:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Babic X-Patchwork-Id: 1912425 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=Vgw4JqGD; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::239; helo=mail-lj1-x239.google.com; envelope-from=swupdate+bncbaabb7vh2cxqmgqe5r3b7cq@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-lj1-x239.google.com (mail-lj1-x239.google.com [IPv6:2a00:1450:4864:20::239]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TwzPK2VSzz23rx for ; Fri, 15 Mar 2024 20:25:23 +1100 (AEDT) Received: by mail-lj1-x239.google.com with SMTP id 38308e7fff4ca-2d48e6c8facsf1382831fa.3 for ; Fri, 15 Mar 2024 02:25:23 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710494720; cv=pass; d=google.com; s=arc-20160816; b=SHQU2nPMgjSl+ayOIR4SVWINVmlGgc8A5lmHJTn+ztGGVmCwaioB2iZiqUphooL9YL GbfheDjPJDAFSX8fVJ4B/mBRav8QOjdf4CRGtSXIIQudnnfyAH6ZccMGiC3m/bAgkEYg 6S3oIrZQIiIZiug+J4PL345NevOv4KPNFotGKHTzjCQHc/fjhLd2EwgJ5SVc4lXdEXOh B9BEO/MiFCxyxUBZOytVUfWhAHvg3/TUAefDhtddWIZPF5HmRo8ZPuF3InXRZOa5BR+S WMHh6HGEOHLEm1zsRCsYSOfJwPndoNJ0imdkcHL3/8/1P2sEkuazHLlkcVZwpeEOWfRH DQyA== ARC-Message-Signature: i=2; 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:ui-outboundreport:mime-version :message-id:date:subject:cc:to:from:sender:dkim-signature; bh=jmXoGrB3uFXjKFwCjLzFLboxJ7reV9RdN3LVQ690NhQ=; fh=TkWi4p1CSX4O1Zu0hjiZ0xvq6M9riUX7GgArdmf/DdM=; b=QAsGLtNdTvh9hAFm6CoKygzUBIFQSsa7ZkS+i3katx85jDJm1oIiLsRhqDbrw/jOUb ZJqvr1qKSh2NP8m1O8SdX0SZpBOal0aO5RA+PHW35RsKbnlbun6NAZM88+YZktTgKgYH K0xLUIE0zErpULUYtTcxd/3znY/kS5GiGaYO7hyKL2HZOyEBv8HateRHzLvqC/TTOQS9 VKYdMi+nQm6v5ctTmIql0Vi2KAGCpdxb+BkCu9Q3SAzK2+0ZX7l8nHWed1Jv9FOJFwGt 0grOam5qejlFHXnGRljFMuHBiCO5KRFIFS+p4n2T8/6HQzgXgrvwiQtVwbjEjtKCiofV cgFg==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@swupdate.org header.s=s1-ionos header.b=wgW2j01N; spf=pass (google.com: domain of stefano.babic@swupdate.org designates 212.227.17.13 as permitted sender) smtp.mailfrom=stefano.babic@swupdate.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1710494720; x=1711099520; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:ui-outboundreport:mime-version:message-id:date :subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=jmXoGrB3uFXjKFwCjLzFLboxJ7reV9RdN3LVQ690NhQ=; b=Vgw4JqGD9Hzejp4rKp4W7UnfeBbjn4e1tQ+UGE49txI+wLX62O3r5SZjPjJ1LESGdm lA7LHM7zRMhVwE0WdeVpBKJedCxNCt2BeZ/WEb2XNjpH/L0Gcg9FNebrQTmEW33Eo+lt Vjy2SxUyicMOPo81NML3xlzHU7s1OdAtPlRfMuAl3oGmkUQaAl9fbWWT6NCVuXfXVaL5 kdE8KLOXvKEg/BCC/fNSEHbgMWrpMdxncGWb/RZRepHNDW7HEzTmNvxwKEsV62655n2K ijQV/ZzIvsdhBfzhcqXu2aDj+cQvE+9SnuJ5iSpesE1rtBqK2wdwQJzaDaKS72BqCwH8 e90A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710494720; x=1711099520; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender :ui-outboundreport:mime-version:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=jmXoGrB3uFXjKFwCjLzFLboxJ7reV9RdN3LVQ690NhQ=; b=ZbKnYLBx0Q2LuEH/usrtQ2JJQu/2Av4v4xdWqFAQeDL0EPo3UV3aL9hoCkWwGtoYCI +x3G82Ml4m7IapTnzOdtV6HC0wm2qIWim1tKKIl10l2OPii6fy337fU7q497lKDju35l 9sprIH9Ly02HDT3JWY+JL/BSxEoVBIcxsPnww5H4cEGza/KKpccjeeRZrpUbmst4aJSU 0kUiIy6E4Wixk+zJaYCkOFTQRFsS2vqMLHmxHmSIutKF7uYUhxKCs8KeYApOqRk0ljZr 6Ck737iTJJNdpvX+v56SEnOX1eTbj5me5GhINQr3Uq/Y4Ry8TK+yx+qe3CMU1FWqnQQO Ol3A== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCXWzfl6GSu8yNl/ZIv4T7LDyCnPGljEUmdvfkEjU61pBA5Mb2MmQiTuMO7RfqcLUsG+xPY4l6Ok47MxApei6MWxUrZxZxfvFi6kTfAYBA== X-Gm-Message-State: AOJu0YzbR0BpxeWvu9i41pDVh3tfp0yNGQKKj4Sr9Z7uFc6EX4f2Tuco jnZ9tC7Ac6BQ4sqUSqzdoHiimqIK/euxCLSswNk8UrEOwrr8RrxQ X-Google-Smtp-Source: AGHT+IFvK5hMEX7vm/h1rx9F8LnOGLRFgYh1BpDRmAa1R4qYRQOg2wG9Kb+l2v0cmv//JxGnVyKpkA== X-Received: by 2002:a2e:a9a6:0:b0:2d3:e77:7801 with SMTP id x38-20020a2ea9a6000000b002d30e777801mr3510048ljq.3.1710494719510; Fri, 15 Mar 2024 02:25:19 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a2e:2281:0:b0:2d3:914b:406e with SMTP id i123-20020a2e2281000000b002d3914b406els138108lji.1.-pod-prod-08-eu; Fri, 15 Mar 2024 02:25:17 -0700 (PDT) X-Received: by 2002:a2e:9850:0:b0:2d4:7829:4d13 with SMTP id e16-20020a2e9850000000b002d478294d13mr2592656ljj.50.1710494717174; Fri, 15 Mar 2024 02:25:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710494717; cv=none; d=google.com; s=arc-20160816; b=O8YqUdjjUSNUPyAFZGUROm7eKikBCjgX9XdMSqPlfQUU516KTkP8GOvsaZBT11RDgG yrvvdm40qHpa9/DpkPJM73FsOgyRM+iHid41Q4FoD8BxktzByPASL7rtjhSrBqB1eWKW SzuzryEydUzF+FVlhHVroTfo/kJfwlAwhsJeZSvFN8SU7IyfUUO/QlnC84oo1Ar1i7Cs wqwDIJG61EPhgSfm5FQ/8U2rYELirUAoM4eoUTfYTRlyVm/VVz0Az9kPqwchDkZ8RLEs 5QmmrXjP2YqafQGTENQqAutqHPknd40YQ4nhOzUz1EzGjwZ2ZBRJkmDmRxNjGgnp3Df1 CQWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=ui-outboundreport:content-transfer-encoding:mime-version:message-id :date:subject:cc:to:from:dkim-signature; bh=Jix/qSZwSU8h9U3/Ra5+SPe4vy19YDd92ygjMK8uIlo=; fh=TiEWcqMcKpHk5s7uErzpntoONrNfOXwKpI5P8bIlggk=; b=IQqrEcSEZVMsh9HKa41R9RswgCl2B8lMKN3RaAyIUbqQpdteWGHdZK9iqlI/OHdji4 qcDF/77h2avpYAH98PbUcNmwZsnFYCyPUMx4F9/0jXzg9oJYipOucLcM20uhGFHmqD82 2GX/N6RJ4YN6V2M1KpjFxeL+rX+j4rhZDeFeH+STc6tW8gObLpk02E8A/rkRFhX/F5bc e3yUK9AFAtSXEvz1S+7gPutvcH1Asqc1mUqFTATI5Ey09+2OYbvt5BbeZbCpCa+Xb1gv NzHYUWHFsaQCyzFff/W9ObGCHyTLNhpdHwrel8z7G5rE08NoXmQZ0d2I7em0bv1IWBIC U+NA==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@swupdate.org header.s=s1-ionos header.b=wgW2j01N; spf=pass (google.com: domain of stefano.babic@swupdate.org designates 212.227.17.13 as permitted sender) smtp.mailfrom=stefano.babic@swupdate.org Received: from mout.kundenserver.de (mout.kundenserver.de. [212.227.17.13]) by gmr-mx.google.com with ESMTPS id z20-20020a2e9b94000000b002d46764b564si167659lji.6.2024.03.15.02.25.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Mar 2024 02:25:17 -0700 (PDT) Received-SPF: pass (google.com: domain of stefano.babic@swupdate.org designates 212.227.17.13 as permitted sender) client-ip=212.227.17.13; X-UI-Sender-Class: 55c96926-9e95-11ee-ae09-1f7a4046a0f6 Received: from paperino.fritz.box ([88.217.136.221]) by mrelayeu.kundenserver.de (mreue106 [213.165.67.113]) with ESMTPSA (Nemesis) id 1M5xDJ-1rjfpX18jT-007Vx2; Fri, 15 Mar 2024 10:25:16 +0100 From: Stefano Babic To: swupdate@googlegroups.com Cc: Stefano Babic Subject: [swupdate] [PATCH 1/2] handler: add function to unregister the handler Date: Fri, 15 Mar 2024 10:25:13 +0100 Message-Id: <20240315092514.485906-1-stefano.babic@swupdate.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Provags-ID: V03:K1:LT8UgbWqMqGghG/RkxT64/uQRr7h16fM0Sas8kHKggMe+9wL2Vd bPoKbeWW2Ua5BfgMlBQej2fcfAiE/VRbUxEDb8Km69jCz1+dFjWM7KJPcX95q/pVK0R/CY7 bpE8sZtTPSQAwRN0vbHbpxtxoO0H7JfCrw68YdkQw8pASJdWhYxU4aRB5nfCT7cT9mXEOT9 jVOxda0WUmldbA701vONQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:a/7zCpZqbKo=;8dfxH8G7jhFbAVJuespmAALW1Tr by27mO8y79VfmeGAPvyJoPLWPnteU/Jy3QkIFYt5RSIgIx3yt67n2qhFl0VJpHfRhZdRh8kzw u7LvyIeePre0ynUZitvZw4ORoLUyMSxlSWxK/SCGvOZSmr0bZ2GhBI1S/jBilj6uVgVE3G+1E t4voJM0vLYRKiTtVbkVpvApjS+Kohd//RQHDxPF2d/kiwYauEJ+PN8W1V4C34ElTlDHk4Me7g p/MejkGOY4D0XXPHscDycdTpeZ1b2lC//kKlFP9vW0RoQYvbnxdaY29TSmNjPndCHcbEofMga aKBuCGFQBzIzhF8LaJlDwg7SUYPxZSkG5vNiC0NG3JuXjg/Pia1IUIo1Tb+hd4vcZwBIQEL4o xzaaiArla56Ov7M9/0FsXKlDU5/Z8C+gkji8nQs0+IKphw7HjUc0rWQ+H9jt3hlna0689XptB pyouH8fs7vDFO4rauF02wrHN6CpwjAc9GQ8l0rE4bF261fqWuUSzg+prcrwuZbZrD6IEnlRgn vxXF41ZkOBuEOjfrecXvcdcF8/IE4cES317RYtzd0uE6ATAYJemRgiYruSe2u+gu66fbui6Lj mHJGYh6UUlg8+JC0f96xuPrdACKUFGa8pWNn0A4n1fnVI98qBB55fh1B0rLKlUyaXv5LP0KV+ hl3iBHDnY9MgPKzjriHF+Njgl1bG0/QXqSFfPYtKC2BaDuE2qO+gXzVBE8MV7hRHcx5Tl/zJE c6Fewy2ceXV74yRAcRRkwYR6qZfURCBOQBWh3hWv7BXF1RvI2qC6y4= X-Original-Sender: stefano.babic@swupdate.org X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@swupdate.org header.s=s1-ionos header.b=wgW2j01N; spf=pass (google.com: domain of stefano.babic@swupdate.org designates 212.227.17.13 as permitted sender) smtp.mailfrom=stefano.babic@swupdate.org 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: , Up now, handlers are instantiated when SWUpdate starts. Add a function to unregister a handler that was set as temporary (noglobal flag) and was instantiated during an install transaction. This is to provide in future a way to add new handlers that are transferred together with the SWU. Signed-off-by: Stefano Babic --- core/handler.c | 54 +++++++++++++++++++++++++++++++++++++++++++++-- include/handler.h | 27 ++++++++++++++++++++---- 2 files changed, 75 insertions(+), 6 deletions(-) -- 2.34.1 diff --git a/core/handler.c b/core/handler.c index d3862a33..74a211ac 100644 --- a/core/handler.c +++ b/core/handler.c @@ -21,8 +21,8 @@ struct installer_handler supported_types[MAX_INSTALLER_HANDLER]; static unsigned long nr_installers = 0; static unsigned long handler_index = ULONG_MAX; -int register_handler(const char *desc, - handler installer, HANDLER_MASK mask, void *data) +static int __register_handler(const char *desc, + handler installer, HANDLER_MASK mask, void *data, handler_type_t lifetime) { int i; @@ -43,11 +43,61 @@ int register_handler(const char *desc, supported_types[nr_installers].installer = installer; supported_types[nr_installers].data = data; supported_types[nr_installers].mask = mask; + supported_types[nr_installers].noglobal = (lifetime == SESSION_HANDLER); nr_installers++; return 0; } +int register_handler(const char *desc, + handler installer, HANDLER_MASK mask, void *data) +{ + return __register_handler(desc, installer, mask, data, GLOBAL_HANDLER); +} + +int register_session_handler(const char *desc, + handler installer, HANDLER_MASK mask, void *data) +{ + return __register_handler(desc, installer, mask, data, SESSION_HANDLER); +} + +int unregister_handler(const char *desc) +{ + int i; + + for (i = 0; i < nr_installers; i++) { + if ((strlen(desc) == strlen(supported_types[i].desc)) && + IS_STR_EQUAL(desc, supported_types[i].desc)) { + break; + } + } + + /* Not found */ + if (i == nr_installers) + return -1; + for (int j = i + 1; j < nr_installers; j++) { + strlcpy(supported_types[j - 1].desc, supported_types[j].desc, + sizeof(supported_types[j -1].desc)); + supported_types[j - 1].installer = supported_types[j].installer; + supported_types[j - 1].data = supported_types[j].data; + supported_types[j - 1].mask = supported_types[j].mask; + } + nr_installers--; + + return 0; +} + +void unregister_session_handlers(void) +{ + int i; + + for (i = nr_installers - 1; i >= 0; i--) { + if (supported_types[i].noglobal) { + unregister_handler(supported_types[i].desc); + } + } +} + void print_registered_handlers(void) { unsigned int i; diff --git a/include/handler.h b/include/handler.h index 66529467..e100bd72 100644 --- a/include/handler.h +++ b/include/handler.h @@ -8,6 +8,8 @@ #pragma once +#include + struct img_type; /* @@ -36,16 +38,29 @@ typedef enum { NO_DATA_HANDLER = 32 } HANDLER_MASK; +/* + * Life-cycle for the handler: + * GLOBAL : handler is instantiated at startup and available for all updates + * SESSION : handler is part of the SWU and available only for the current update + */ + +typedef enum { + GLOBAL_HANDLER, + SESSION_HANDLER +} handler_type_t; + #define ANY_HANDLER (IMAGE_HANDLER | FILE_HANDLER | SCRIPT_HANDLER | \ BOOTLOADER_HANDLER | PARTITION_HANDLER | \ NO_DATA_HANDLER) typedef int (*handler)(struct img_type *img, void *data); struct installer_handler{ - char desc[64]; - handler installer; - void *data; - unsigned int mask; + char desc[64]; /* Name that identifies the handler */ + handler installer; /* Handler function */ + void *data; /* Private data for the handler */ + unsigned int mask; /* Mask (see HANDLER_MASK) */ + bool noglobal; /* true if handler is not global and + should be removed after install */ }; struct script_handler_data { @@ -59,6 +74,10 @@ struct script_handler_data { int register_handler(const char *desc, handler installer, HANDLER_MASK mask, void *data); +int register_session_handler(const char *desc, + handler installer, HANDLER_MASK mask, void *data); +int unregister_handler(const char *desc); +void unregister_session_handlers(void); struct installer_handler *find_handler(struct img_type *img); void print_registered_handlers(void);