From patchwork Thu May 8 16:51:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Tjernlund X-Patchwork-Id: 2083033 X-Patchwork-Delegate: sbabic@denx.de 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=VekafkJ0; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::53a; helo=mail-pg1-x53a.google.com; envelope-from=swupdate+bncbdk5pxouq4irbkoc6paamgqelkireea@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-pg1-x53a.google.com (mail-pg1-x53a.google.com [IPv6:2607:f8b0:4864:20::53a]) (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 4ZtdSw48lmz1yWr for ; Fri, 9 May 2025 02:51:43 +1000 (AEST) Received: by mail-pg1-x53a.google.com with SMTP id 41be03b00d2f7-b1fa2cad5c9sf741570a12.2 for ; Thu, 08 May 2025 09:51:59 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1746723115; cv=pass; d=google.com; s=arc-20240605; b=caoj2BWqDTv49OxFdq23JncvNGbrC6PjZ4xz9LuKr4Nt/cSeTpPbqBh+hh9PODUDR5 +ZRXcOhiAzNG0l6443e/JveaANInQrFbe4Uay1o7LQWKPR2gxJB8q1mkl5X5tazqpgHO HtqTFG/V6ryVm8+sO0IU8AQ2dBZ2rRgW81IqiIID4rd1lXsRENsX9wnRKpmsIB8zUDlI G2JfFk7oEf8QIAuGK/vIo58FZCftUew0SgIx5To5JCnnWgYgQSlY1Ab7OKNs+bAPJ6Hl 1PrRnDu/HpmTGbFfeUGlXqQA6twvlOgpa2s7ODgLVMbPfxObhqZp3+0KqIAcKkfYMVgn DlhA== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:mime-version:message-id :date:subject:cc:to:from:dkim-signature; bh=4etHUKHO4bqd8W/1D+jBMxrms+n8wknr+lnLpWulChU=; fh=lq3lTnnNrgM7IQG7gKp9YuqFhZy2aENB3Wm13hgffXQ=; b=AskzY9kSLGmicwjAH7zKoo+utGT4rjZxEPI+6S0gMyLIMHDybveQQhA8FVCxBisaAk NadmxvyUdS8YRw+NGEBBksDJZ8U/f45L43QHvySaLm5ZE+W5Ar758YF82kZ88n84EytV AoNuGKrr7mvoKgZ3hIzTTFR8mstTjFAlaPm6ipLPGvUg9o6NrpZa4tpZvvOmvU9+p2ig Kr7LW+qJ0Cavu6V145rHp1/SC7mrKoYdxOfpqqM8x/Y0qPcTZUe8w3+te0Z552+M1dY0 kymaYm++hz6mkFjhHorpk68mC6z8baPypaT6k3tCpKpGXY5r998qid/zam0lMYiiXM6A EmSw==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@infinera.com header.s=selector2 header.b=pQ4REcp8; arc=pass (i=1 spf=pass spfdomain=infinera.com dmarc=pass fromdomain=infinera.com); spf=pass (google.com: domain of joakim.tjernlund@infinera.com designates 2a01:111:f403:c101::1 as permitted sender) smtp.mailfrom=Joakim.Tjernlund@infinera.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=infinera.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1746723115; x=1747327915; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4etHUKHO4bqd8W/1D+jBMxrms+n8wknr+lnLpWulChU=; b=VekafkJ0odOUO7mKZgT5AftHjaVx8GF7Mu8BG4BnZdOV9LyLHTZ9D9CCSQJycEtKRr GKiF5jQdXvNgPQB1GaSHuJ7MrmQv+SRyImz+ATv7TC/3TOWO7/HRGFhzqbZFOYZygXKv /eMQap0lckAuUyUQ0uX3AH72OxEo0LL6Az//uHiuEVjpKdc5+lLAXXkal6WHHCy+pdGl 5GJ6g2ihevzKu079oaxXFbQzAVlgRf+3NtRs+XRMY/dfgwxTyxmjYcWg852LxpODpY78 DPhZcJlH82lae0yxalgtxaeeHm3QbXPzmmBjbNrdGlrvXFztBp8zbng2XFoUu6J+vB6V eKNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746723115; x=1747327915; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=4etHUKHO4bqd8W/1D+jBMxrms+n8wknr+lnLpWulChU=; b=XTzoeNLDjP0/tzEGUFVW9j+42oEv6DACMQiroL8cpzLf2jQSVEK6+VkwkLtMeGCaQo u/ff9LMbtRQuGIHIsaI+UJXuA78Mezqd3xUAt4ESaUQtrHrAISJiYAkylmVWTsPXk+bN Wi23PdrXM1F9NcXzDF/qSMn6dWckUGdWgpJ0EmjG6zyXGEuopddbD7fxmlY3PBBgMxUc xgR0dhbloZp9DMZtHd+tHHUDhUdlBIsmtENtoykPXJxftp64ltjKpLKI3l+Std0kTOSV xZLHl4Q8y09zaumbGKQpo357Og2F4KozRkZo/7oXR+pXg4YkX423euMyZdgYfuL8z7lT Vb1g== X-Forwarded-Encrypted: i=3; AJvYcCWhLVWaffQMTM72gpv/9lkV6gw380BWDe5x1PmTrYDDIhU5l0gqZFNLIhvSS9D2KdBypf5W6FmyRQ==@patchwork.ozlabs.org X-Gm-Message-State: AOJu0YzzryW6FRbxU9hLXro4YggvC3SNSyikI1Ff5lfF1aUzGqyk9pZK 5M9qwnVd4rfYIKvOqigczV6sN28CbV1XJx1TZ9CVCTlNPv3bormZ X-Google-Smtp-Source: AGHT+IGnWmLCkR+z4cZgpSQMb5UsoSs/8ghqu9r0/MzRRwNLop3IAfQbOUthuQ6sqp0FgjI2VLauRQ== X-Received: by 2002:a17:903:194e:b0:22e:6ea8:8a0a with SMTP id d9443c01a7336-22fc8e99d1amr619425ad.35.1746723115514; Thu, 08 May 2025 09:51:55 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com; h=AVT/gBEIKB/00j5zgDMOsT1AXwFu6BNh3TSs5HxKpqumCIzJ8g== Received: by 2002:a17:902:c24c:b0:226:488e:2ab0 with SMTP id d9443c01a7336-22e847c8e9bls8829355ad.2.-pod-prod-04-us; Thu, 08 May 2025 09:51:53 -0700 (PDT) X-Received: by 2002:a17:902:d508:b0:224:1ec0:8a1d with SMTP id d9443c01a7336-22fc8b59b47mr874185ad.30.1746723112713; Thu, 08 May 2025 09:51:52 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1746723112; cv=pass; d=google.com; s=arc-20240605; b=H0N1293+I2n18W9ekl5akpTHPtOH3DT3qS1PuGyFlhc1fgDY4SKLZr195ZGhJE3aNd tPvYyR5R50A0ojQvyuDJKmODz5ZVAXBrHyUy/JqcZuuNFuIe9XjBzqHVrJpaE9OjMcYi QQJ1TgAQJeqPdqWS6EG4aSl61zEM0slZl5n3qR64vsZR2ZP7d7KEsFnIywUOQczgksTF 3SRTw/c0ytGn7SIxHahDaY+ZnENEHK04L7AoI3ZOfRD69/SVoq/Na58c04IdDC5XFZbO yS7onJCGk998LUSlybnWs/7D0VKr3AypTcVJEfoOEwa2ykJuIP+TTpGuZA0ojOEIME+P 0Hdg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=rTOQk5x6EnAYQzRTmjjTVJ3625MYIPpuZkWyye/InT8=; fh=4X021nhrp6aK94Q3MjNJVgyxLqPp4uMlMmMJzQOJHxU=; b=TU+26wzu+pCKqdub1T6+L5c4SycpM+R+FcI63kcAAlncBJKKhKrHb03xzmU5G4Bcfo dgWqoq1Azynik1W0VWpVa7LS1vwl42w+V4gdp40sfR+yAL26JV0Cnv0GsaS7JR1w4T3Y 0WBuzcRKm9eAJ7i4WuRO+TsMBLs/DuGJuVvAPcb+r+jBPDJiX7YLj/e9uOJr8m84XaC6 evfkWLTqhqWFu78laB/AwWCncJ38fmI9L48b43058StLxEyv3cksTOOXRsnwNn4Jpssa ZDEVRGo4kUQ8D69sfIwJbimZ3PdZq8UZ+9co9apn90ZB3uiKq9UdEhgyIhS56LMrOfkv GqgQ==; dara=google.com ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@infinera.com header.s=selector2 header.b=pQ4REcp8; arc=pass (i=1 spf=pass spfdomain=infinera.com dmarc=pass fromdomain=infinera.com); spf=pass (google.com: domain of joakim.tjernlund@infinera.com designates 2a01:111:f403:c101::1 as permitted sender) smtp.mailfrom=Joakim.Tjernlund@infinera.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=infinera.com Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazlp170100001.outbound.protection.outlook.com. [2a01:111:f403:c101::1]) by gmr-mx.google.com with ESMTPS id d9443c01a7336-22fc713aed0si99535ad.1.2025.05.08.09.51.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 May 2025 09:51:52 -0700 (PDT) Received-SPF: pass (google.com: domain of joakim.tjernlund@infinera.com designates 2a01:111:f403:c101::1 as permitted sender) client-ip=2a01:111:f403:c101::1; ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CEikM7Q/PlA7qcXu9H5JmwX7MXZTH2n5dpL2AlWK1qQm6dvrxZZm8EOWKGVdx0eTVa2kkMMZdJEoDSE1/AHG0nq2tTjx/nHyzCwUf+MOexpp3DrilMhvrH3gY2sC11HpKrUqDF6EuzbVk5uIkeQglBeuVA7mXXy1rGZROD+kxc5JQ2k5vJOks8CXYEoJvgwjjJ+3+bpie0/CjCNPGX7974/gBSJIMVzoAk1i+m6Eikhp2CbuUA/3ikCJc9U89ugf1309RxoMX4CsyZqn3a7CM8DFyWfpcCaiI/vOy65CvoL6CaA5N3XvSQH3NZY5060jbaElZl2cLS0N8/ruUMAlGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rTOQk5x6EnAYQzRTmjjTVJ3625MYIPpuZkWyye/InT8=; b=dJk2uNlL4HnrxDYxxFcjgsaWFAsvAb++GEPaWsDcKRjl1xiFPMC99G0xwTrypqHKxWKkjmzk9LwyqMiZjR3whHeycD/MENisBrkIPFwb+XYWvZG0ekmeJy6FBo1Rbn47VGzlyAcdkq+GY63ZlWXv3ucZMP3/IvVvon15WiqPBtK6Tn/yX2BCBEuyD1qEHqAh5GbBnR2gYwRjhe6F2c76BOV9CCvam7z7cu5rltmZwZi0KCrJi+eBMfP9GiQjGpBR0cQu/BMPkf3ObbQ38kJfNjpyZIIWKLhrtutAIEANt6ab7DGmLujoqixt1lBFtvm9O7pr/BJMH1vz0V71nDsbXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 8.4.225.30) smtp.rcpttodomain=googlegroups.com smtp.mailfrom=infinera.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=infinera.com; dkim=none (message not signed); arc=none (0) Received: from PH8P221CA0053.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:346::18) by IA4PR10MB8448.namprd10.prod.outlook.com (2603:10b6:208:560::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.23; Thu, 8 May 2025 16:51:46 +0000 Received: from CY4PEPF0000E9DA.namprd05.prod.outlook.com (2603:10b6:510:346:cafe::42) by PH8P221CA0053.outlook.office365.com (2603:10b6:510:346::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8699.32 via Frontend Transport; Thu, 8 May 2025 16:51:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 8.4.225.30) smtp.mailfrom=infinera.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=infinera.com; Received-SPF: Pass (protection.outlook.com: domain of infinera.com designates 8.4.225.30 as permitted sender) receiver=protection.outlook.com; client-ip=8.4.225.30; helo=owa.infinera.com; pr=C Received: from owa.infinera.com (8.4.225.30) by CY4PEPF0000E9DA.mail.protection.outlook.com (10.167.241.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.18 via Frontend Transport; Thu, 8 May 2025 16:51:43 +0000 Received: from sv-ex16-prd.infinera.com (10.100.96.229) by sv-ex16-prd.infinera.com (10.100.96.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Thu, 8 May 2025 09:51:42 -0700 Received: from sv-smtp-pd1.infinera.com (10.100.98.81) by sv-ex16-prd.infinera.com (10.100.96.229) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Thu, 8 May 2025 09:51:42 -0700 Received: from se-metroit-prd1.infinera.com ([10.210.32.58]) by sv-smtp-pd1.infinera.com with Microsoft SMTPSVC(10.0.17763.1697); Thu, 8 May 2025 09:51:42 -0700 Received: from se-jocke-lx.infinera.com (se-jocke-lx.infinera.com [10.210.73.25]) by se-metroit-prd1.infinera.com (Postfix) with ESMTP id 8DDB7F400D1 for ; Thu, 8 May 2025 18:51:41 +0200 (CEST) Received: by se-jocke-lx.infinera.com (Postfix, from userid 1001) id 8981A600F730; Thu, 08 May 2025 18:51:41 +0200 (CEST) X-Patchwork-Original-From: "'Joakim Tjernlund' via swupdate" From: Joakim Tjernlund To: CC: Joakim Tjernlund Subject: [swupdate] [PATCH] Add support for XZ decompression Date: Thu, 8 May 2025 18:51:26 +0200 Message-ID: <20250508165135.3884914-1-joakim.tjernlund@infinera.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-OriginalArrivalTime: 08 May 2025 16:51:42.0582 (UTC) FILETIME=[79BF7160:01DBC039] X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DA:EE_|IA4PR10MB8448:EE_ X-MS-Office365-Filtering-Correlation-Id: fd0f79fe-b92a-4b82-6b22-08dd8e509ccd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: HIRU3kgDjbJ/GEk2PsxW9WDc7KweDan06e9xMp4XNfpNJEW8lQiz3QDxHvu2Jj0d4lM7Qz34hk5WayNaY6LdM/iostejyp3Z+NI7v71aMX2xJI56dMsF/jiGsZoePAtFukP2esftBcT1f/UFaR3ArXHC3u09CaHqMxY/+uVNG/X/B23T/ozbEbtubfy1UWGBQ3Yzo1p+cIhHoHe5lCxUry7DeHkeTAJ9TaSZF0J/k7bsNz52tSshhddHDz66MfmYB6IwVGF9NNT5Z2Kh4cQJzVfwx+xuO37zS2PFa92RgqmJZcZgd3tdejxVXaHH0vJpSWqU2rfbnUi1/9qopGDEtVf0tu5+SYBWJvnEf47UHZoRDqmsncbHy1XPgra56cis4CQoy+DIyq4zajDrREgsGlzK3b456wRLnbbVi2JSc97H/994aEh3RI7vh/Mvp3eEeVToivbMqitrjDfS+p8O9CKIz9o7PZcYCTpcDzTIFp1mMd6vzys/Vvm7KCIxLBUqlR5oHvQ1Ueom9t7ySq1BJpUZiJKu3ys1HYYxgbMOW9PybJ3p9ktVO0o5u+BUS92/Z9QfCGz+CKUfutRWqRSVwpOthZx3IOAph2xAfUvqKbLhH5Yl4yPGKimOuLVQbYooAbH5//J2W0pGPNucQ45HkSiRHUaWr9/NwQzDnutl0h23kEe8JY+/h5JNISc4KBrt1YbCzafnCoKMaMobMNw26AMs5HIr+Z/LmU6udHTcndUXkFI5UXiY7YGBM+S6z3osdPQJTXzwgC7CfWCWQKh8Eiq1PvpzXm9CoVsZL9cuVQwGE4TWcj9TWCOIJv7CQUYhghnLrselbfeWS+X74+AVpof8e5UJyzUBVkw1iWQ0KiohPyKKbdzS5Wyq6rd+xo1tuhMqBjGESt211PXppLF2t/84GyQnyPnjN5A6ItFWxbPL2lGsdkJocfjmjAs6zmrtM+xjlohXUfwTvxE8gUEWk2fsw9ShcIrpIwpJQUe3ckYkzmg0+Zj0i065QHMjpoAQQWub+CBlxE2Nr7V7+Zi7M2dNg46omQ4RoOEPnjtfeEcT86ikUVQSBxlF/0pIpFAWqvrJt7wjh2qNSg8ZXg4pNlQiePkpL+GbFzeLgd9uq8WMMUFx6YAXeBzI/U5ErfB4m0nVtcEMr93OgZ9q4Y8ahq45ziBcrZUMI4/Y1A1jpTnVoWg1846h4ziT6KCxV8zVPEJ/BaYnuuHQVrxtEHe1H5TvIJKmkRkLklo9ynvSbGBtfOp8Tpr+7YZB/ysaJ6Ajak6ch4nyHUkYy8BDXNLj8JeGI+bifDjTaHTuNH7uY7DF5zzeLgXfg5BGb3/w8oJSyUhplcl1oEJnDObsq9NrRRfsVat5aTvaDE/bAWHY3HmBgOYBu3xGYCQWdil3wfjTr7Yj95TpQEhyxIuMC+OFVtWAeua9JRMGAqwsSiN9Y+VWqjCySXOODOnJ2S1F/exuGyCY6nGOY0MeoGAckf6apCjd6nsbNgtAmVzzmp6qrO0jQWNpaRgvK0V1rIJQ/rHl X-Forefront-Antispam-Report: CIP:8.4.225.30;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:owa.infinera.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: infinera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 May 2025 16:51:43.2337 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fd0f79fe-b92a-4b82-6b22-08dd8e509ccd X-MS-Exchange-CrossTenant-Id: 285643de-5f5b-4b03-a153-0ae2dc8aaf77 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=285643de-5f5b-4b03-a153-0ae2dc8aaf77;Ip=[8.4.225.30];Helo=[owa.infinera.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DA.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA4PR10MB8448 X-Original-Sender: joakim.tjernlund@infinera.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@infinera.com header.s=selector2 header.b=pQ4REcp8; arc=pass (i=1 spf=pass spfdomain=infinera.com dmarc=pass fromdomain=infinera.com); spf=pass (google.com: domain of joakim.tjernlund@infinera.com designates 2a01:111:f403:c101::1 as permitted sender) smtp.mailfrom=Joakim.Tjernlund@infinera.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=infinera.com X-Original-From: Joakim Tjernlund Reply-To: Joakim Tjernlund 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: , XZ compresses better than GZIP Signed-off-by: Joakim Tjernlund --- Kconfig | 8 ++++ Makefile.deps | 4 ++ Makefile.flags | 4 ++ core/cpio_utils.c | 80 +++++++++++++++++++++++++++++++++-- corelib/lua_interface.c | 5 +++ doc/source/sw-description.rst | 4 +- doc/source/swupdate.rst | 2 +- include/util.h | 1 + parser/parse_external.c | 2 + parser/parser.c | 2 + 10 files changed, 106 insertions(+), 6 deletions(-) diff --git a/Kconfig b/Kconfig index 79237bf5..fd74d013 100644 --- a/Kconfig +++ b/Kconfig @@ -81,6 +81,10 @@ config HAVE_ZLIB bool option env="HAVE_ZLIB" +config HAVE_XZ + bool + option env="HAVE_XZ" + config HAVE_ZSTD bool option env="HAVE_ZSTD" @@ -529,6 +533,10 @@ config GUNZIP depends on HAVE_ZLIB default y +config XZ + bool "XZ compression support" + depends on HAVE_XZ + config ZSTD bool "Zstd compression support" depends on HAVE_ZSTD diff --git a/Makefile.deps b/Makefile.deps index c62f1af0..02e420f0 100644 --- a/Makefile.deps +++ b/Makefile.deps @@ -62,6 +62,10 @@ ifeq ($(HAVE_ZLIB),) export HAVE_ZLIB = y endif +ifeq ($(HAVE_XZ),) +export HAVE_XZ = y +endif + ifeq ($(HAVE_ZSTD),) export HAVE_ZSTD = y endif diff --git a/Makefile.flags b/Makefile.flags index 9561ec82..d65f0db4 100644 --- a/Makefile.flags +++ b/Makefile.flags @@ -177,6 +177,10 @@ ifeq ($(CONFIG_GUNZIP),y) LDLIBS += z endif +ifeq ($(CONFIG_XZ),y) +LDLIBS += lzma +endif + ifeq ($(CONFIG_ZSTD),y) LDLIBS += zstd endif diff --git a/core/cpio_utils.c b/core/cpio_utils.c index 7c4205a7..9936dd3c 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -16,6 +16,9 @@ #ifdef CONFIG_GUNZIP #include #endif +#ifdef CONFIG_XZ +#include +#endif #ifdef CONFIG_ZSTD #include #endif @@ -332,7 +335,7 @@ static int decrypt_step(void *state, void *buffer, size_t size) return 0; } -#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) +#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) || defined(CONFIG_XZ) typedef int (*DecompressStep)(void *state, void *buffer, size_t size); struct DecompressState { @@ -391,6 +394,53 @@ static int gunzip_step(void *state, void *buffer, size_t size) #endif +#ifdef CONFIG_XZ +struct XzState { + lzma_stream strm; + bool initialized; +}; +static int xz_step(void* state, void* buffer, size_t size) +{ + struct DecompressState *ds = (struct DecompressState *)state; + struct XzState *s = (struct XzState *)ds->impl_state; + lzma_ret ret; + int outlen = 0; + lzma_action action = LZMA_RUN; + + s->strm.next_out = buffer; + s->strm.avail_out = size; + + while (outlen == 0) { + if (s->strm.avail_in == 0) { + ret = ds->upstream_step(ds->upstream_state, ds->input, sizeof ds->input); + if (ret < 0) { + return ret; + } else if (ret == 0) { + ds->eof = true; + } + s->strm.avail_in = ret; + s->strm.next_in = ds->input; + } + if (ds->eof) { + action = LZMA_FINISH; + } + + ret = lzma_code(&s->strm, action); + outlen = size - s->strm.avail_out; + if (ret == LZMA_STREAM_END) { + ds->eof = true; + break; + } + if (ret != LZMA_OK && ret != LZMA_BUF_ERROR) { + ERROR("xz failed (returned %d)", ret); + return -1; + } + } + return outlen; +} + +#endif + #ifdef CONFIG_ZSTD struct ZstdState { @@ -496,7 +546,7 @@ int copyfile(struct swupdate_copy *args) .outlen = 0, .eof = false }; -#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) +#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) || defined(CONFIG_XZ) struct DecompressState decompress_state = { .upstream_step = NULL, .upstream_state = NULL, .impl_state = NULL @@ -513,6 +563,12 @@ int copyfile(struct swupdate_copy *args) .initialized = false, }; #endif +#ifdef CONFIG_XZ + struct XzState xz_state = { + .strm = LZMA_STREAM_INIT, + .initialized = false, + }; +#endif #ifdef CONFIG_ZSTD struct ZstdState zstd_state = { .dctx = NULL, @@ -585,6 +641,19 @@ int copyfile(struct swupdate_copy *args) decompress_state.impl_state = &gunzip_state; } else #endif +#ifdef CONFIG_XZ + if (args->compressed == COMPRESSED_XZ) { + if (lzma_stream_decoder(&xz_state.strm, UINT32_MAX, + LZMA_CONCATENATED) != LZMA_OK) { + ERROR("(lzma_stream_decoder failed"); + ret = -EFAULT; + goto copyfile_exit; + } + xz_state.initialized = true; + decompress_step = &xz_step; + decompress_state.impl_state = &xz_state; + } else +#endif #ifdef CONFIG_ZSTD if (args->compressed == COMPRESSED_ZSTD) { if ((zstd_state.dctx = ZSTD_createDStream()) == NULL) { @@ -630,7 +699,7 @@ int copyfile(struct swupdate_copy *args) state = &decrypt_state; } -#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) +#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) || defined(CONFIG_XZ) if (args->compressed) { decompress_state.upstream_step = step; decompress_state.upstream_state = state; @@ -699,6 +768,11 @@ copyfile_exit: inflateEnd(&gunzip_state.strm); } #endif +#ifdef CONFIG_XZ + if (xz_state.initialized) { + lzma_end(&xz_state.strm); + } +#endif #ifdef CONFIG_ZSTD if (zstd_state.dctx != NULL) { ZSTD_freeDStream(zstd_state.dctx); diff --git a/corelib/lua_interface.c b/corelib/lua_interface.c index ffe62d88..e988a4ec 100644 --- a/corelib/lua_interface.c +++ b/corelib/lua_interface.c @@ -283,6 +283,8 @@ static void lua_string_to_img(struct img_type *img, const char *key, if (!strcmp(key, "compressed")) { if (!strcmp(value, "zlib")) { img->compressed = COMPRESSED_ZLIB; + } else if (!strcmp(value, "xz")) { + img->compressed = COMPRESSED_XZ; } else if (!strcmp(value, "zstd")) { img->compressed = COMPRESSED_ZSTD; } else { @@ -530,6 +532,9 @@ static void update_table(lua_State* L, struct img_type *img) case COMPRESSED_ZLIB: LUA_PUSH_IMG_STRING_VALUE(img, "compressed", "zlib"); break; + case COMPRESSED_XZ: + LUA_PUSH_IMG_STRING_VALUE(img, "compressed", "xz"); + break; case COMPRESSED_ZSTD: LUA_PUSH_IMG_STRING_VALUE(img, "compressed", "zstd"); break; diff --git a/doc/source/sw-description.rst b/doc/source/sw-description.rst index df2cb258..dbe29d3b 100644 --- a/doc/source/sw-description.rst +++ b/doc/source/sw-description.rst @@ -1415,8 +1415,8 @@ There are 4 main sections inside sw-description: | | | files | compressed and must be decompressed | | | | | before being installed. the value | | | | | denotes the compression type. | - | | | | currently supported values are "zlib" | - | | | | and "zstd". | + | | | | currently supported values are "xz", | + | | | | "zlib" and "zstd". | +-------------+----------+------------+---------------------------------------+ | compressed | bool (dep| images | Deprecated. Use the string form. true | | | recated) | files | is equal to 'compressed = "zlib"'. | diff --git a/doc/source/swupdate.rst b/doc/source/swupdate.rst index fa43071c..694fbcfa 100644 --- a/doc/source/swupdate.rst +++ b/doc/source/swupdate.rst @@ -57,7 +57,7 @@ General Overview SWUpdate can recreate UBI volumes, resizing them and copying the new software. -- support for compressed images, using the zlib and zstd library. +- support for compressed images, using the xz, zlib and zstd library. tarball (tgz file) are supported. - support for partitioned USB-pen or unpartitioned (mainly diff --git a/include/util.h b/include/util.h index 07c20770..9509fdbd 100644 --- a/include/util.h +++ b/include/util.h @@ -61,6 +61,7 @@ enum compression_type { COMPRESSED_FALSE, COMPRESSED_TRUE, COMPRESSED_ZLIB, + COMPRESSED_XZ, COMPRESSED_ZSTD, }; diff --git a/parser/parse_external.c b/parser/parse_external.c index 20ac0771..d67bcca0 100644 --- a/parser/parse_external.c +++ b/parser/parse_external.c @@ -87,6 +87,8 @@ static void sw_append_stream(struct img_type *img, const char *key, if (value != NULL) { if (!strcmp(value, "zlib")) { img->compressed = COMPRESSED_ZLIB; + } else if (!strcmp(value, "xz")) { + img->compressed = COMPRESSED_XZ; } else if (!strcmp(value, "zstd")) { img->compressed = COMPRESSED_ZSTD; } else { diff --git a/parser/parser.c b/parser/parser.c index a8f4a691..c702dd06 100644 --- a/parser/parser.c +++ b/parser/parser.c @@ -441,6 +441,8 @@ static int parse_common_attributes(parsertype p, void *elem, struct img_type *im if ((compressed = get_field_string(p, elem, "compressed")) != NULL) { if (!strcmp(compressed, "zlib")) { image->compressed = COMPRESSED_ZLIB; + } else if (!strcmp(compressed, "xz")) { + image->compressed = COMPRESSED_XZ; } else if (!strcmp(compressed, "zstd")) { image->compressed = COMPRESSED_ZSTD; } else {