Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217758/?format=api
{ "id": 2217758, "url": "http://patchwork.ozlabs.org/api/patches/2217758/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260330140106.401876-1-ravi@prevas.dk/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260330140106.401876-1-ravi@prevas.dk>", "list_archive_url": null, "date": "2026-03-30T14:01:06", "name": "cmd: test: add bug-compatibility special case for 'test -n'", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d62fba12bd46083ed99fb0fe5962afdca26d3b55", "submitter": { "id": 89443, "url": "http://patchwork.ozlabs.org/api/people/89443/?format=api", "name": "Rasmus Villemoes", "email": "ravi@prevas.dk" }, "delegate": { "id": 3651, "url": "http://patchwork.ozlabs.org/api/users/3651/?format=api", "username": "trini", "first_name": "Tom", "last_name": "Rini", "email": "trini@ti.com" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260330140106.401876-1-ravi@prevas.dk/mbox/", "series": [ { "id": 498035, "url": "http://patchwork.ozlabs.org/api/series/498035/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=498035", "date": "2026-03-30T14:01:06", "name": "cmd: test: add bug-compatibility special case for 'test -n'", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498035/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217758/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217758/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=prevas.dk header.i=@prevas.dk header.a=rsa-sha256\n header.s=selector1 header.b=T00ROJ1i;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)", "phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=prevas.dk", "phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de", "phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=prevas.dk header.i=@prevas.dk header.b=\"T00ROJ1i\";\n\tdkim-atps=neutral", "phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=prevas.dk", "phobos.denx.de;\n spf=pass smtp.mailfrom=rasmus.villemoes@prevas.dk", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=prevas.dk;" ], "Received": [ "from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fktHR2q0Sz1yG8\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 31 Mar 2026 01:02:42 +1100 (AEDT)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 35C8D83DBF;\n\tMon, 30 Mar 2026 16:02:39 +0200 (CEST)", "by phobos.denx.de (Postfix, from userid 109)\n id BFB6783E7A; Mon, 30 Mar 2026 16:02:37 +0200 (CEST)", "from AM0PR83CU005.outbound.protection.outlook.com\n (mail-westeuropeazlp170100001.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c201::1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id EE44F83D17\n for <u-boot@lists.denx.de>; Mon, 30 Mar 2026 16:02:33 +0200 (CEST)", "from AS5PR10MB8243.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:681::18)\n by DU0PR10MB7508.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:427::6) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.28; Mon, 30 Mar\n 2026 14:02:23 +0000", "from AS5PR10MB8243.EURPRD10.PROD.OUTLOOK.COM\n ([fe80::ebc6:4e0d:5d6b:95d8]) by AS5PR10MB8243.EURPRD10.PROD.OUTLOOK.COM\n ([fe80::ebc6:4e0d:5d6b:95d8%5]) with mapi id 15.20.9745.027; Mon, 30 Mar 2026\n 14:02:22 +0000" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,\n SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2", "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=UrWzpl1yYTaJsFRrlSxG6VCWTqUEhdMuUVu/WMdfcFKdMDDU3yAjv3yJlpLN9W9xEjK5AwY5hf17brqGms6nvKKNk+CvK19GY/KYmp8gCmWHZmBiQ3LyOQjM+McE96T6P0aoRwiONkkQf3hNsiUh8nEP1g3rbNSTT+tCzNJmQcny/aNWQlV6xcIxcy+17Bxyv+deaWqayn9XEmmVUUUb5xMcyR8pAiI+020SpygB1ToOjVmkqnkGrujvlnK1vWot83GEauUxhbCVdNoQ6IGVI+oymmZKcqjlapKC6R+u3U3GUVZxQIjQr+miZ/IL84yvJTSFXKytiJiOKKPVlF2RCQ==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=A5hw4PQshPvUyGP7a7qkZ3h3QTg+JM2o0MitvR+j0SY=;\n b=QDWnXeJf/PaU+GkbOlwX910viYjhD9ahB0WnPa3mTzsAqZHkXHzQYEov47AClM+X0hcCkp1YQFqN476QRR6CvbtTUVbO/W9/dHzFfy03BXa2LxCf5vb6D0+9dBN3CY8vWjR7yJQnGcspPS1Nqp4z4IMwguGKjAS6sdbHnXO7ypF6VYV5zolSd3G7OJxfj2cp+eWSU9SDtX2otB0Lc5nimfDUwJZGMXXKMJO0T/ywLGblOzkdVCB4X7Wc3I1+jF1XFj8bLQzvbWqaUGry7J+0cr3Hg12F1s9gsAjMsS5zwq6lT1tyamHLWJtOrD8He2P2ArElQLTiUDdKp8vV97PqVQ==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=prevas.dk; dmarc=pass action=none header.from=prevas.dk;\n dkim=pass header.d=prevas.dk; arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=prevas.dk;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=A5hw4PQshPvUyGP7a7qkZ3h3QTg+JM2o0MitvR+j0SY=;\n b=T00ROJ1ichNsx5hcAH3tO0GpiKVWHgOCUnh8rbWM8FA4PbAMCofGvGSyPXCfXMKZtry8ZUh9gm2il2TO1YWKDs+koWdc0vduSo3RiUtZf2eMOYruLmfWMa707pb7W4RSwFsmNgngzMb+7V99rALJ3q8KNqVa4VewP/B29YvFAqs=", "From": "Rasmus Villemoes <ravi@prevas.dk>", "To": "u-boot@lists.denx.de", "Cc": "Tom Rini <trini@konsulko.com>, Anshul Dalal <anshuld@ti.com>,\n Rasmus Villemoes <ravi@prevas.dk>,\n Franz Schnyder <franz.schnyder@toradex.com>", "Subject": "[PATCH] cmd: test: add bug-compatibility special case for 'test -n'", "Date": "Mon, 30 Mar 2026 16:01:06 +0200", "Message-ID": "<20260330140106.401876-1-ravi@prevas.dk>", "X-Mailer": "git-send-email 2.53.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "CPCP307CA0007.DNKP307.PROD.OUTLOOK.COM (2603:10a6:380::7)\n To AS5PR10MB8243.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:681::18)", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "AS5PR10MB8243:EE_|DU0PR10MB7508:EE_", "X-MS-Office365-Filtering-Correlation-Id": "a457416f-c996-4129-bcba-08de8e64f711", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|376014|52116014|366016|1800799024|38350700014|56012099003|18002099003;", "X-Microsoft-Antispam-Message-Info": "\n pzGclArbkO8QEIl5gh3a2J9+GF/IJptSsIhXUKy+JkWFDdRUSKzlu56AJQKi8lBBnJDWmLxU0QWK8YBmJvKrO+/T/LpVw/ax892ryhBOBg9CAOxh2BSnG6vWA9JUld8PKTZ6iyk5Dl7t2m3WVpcFHCnvZC9AWMb/wOFyKF3dH4OJrleSbpEnL6iRUeKt3gGC6kVGGCYYBV8MJcjqnojhf9OX7HCRhuKSGRcU2msJQ6h7dty38x1endL0MZHC420RDituNNgQruXEA2lKCMNhtPP7ySjaZp9ZEKresegXJZoXFWMwqRkS++bn3G0lqEd8EVsmMcKin1jrAFgtPVzdkVAmhlmvcmWdGOOLxPq3giF7pfiyTvq4ZnlhztUco4TM6/J476UElxEeZyER+hNs0MylkeCDAE9CT1FXt7I21XufFQ38YVw6Y7k4YP/YHhx8ydhNBvipz09NKusrpPNs5GhvSj63JhOHlauiyzQeJlWY3LylqSu41KKDnWMVqL6vbyA7hve6z8Gcvef/m0WpFYbI90bumxNazLpc1NcftjvQ5PxwNHTj4lsn1ZVGPseyWOA49+r1BByeUFalPlFY3HOBMUXQXnnSjx54IXAemX0vGNvpbI7tX0nHsZn/Tqorm9/S3bdO3EJ16CA9+l01Xuz+NBzKoCOBkT2h7pzdo91OYY+Z90nfU6VdUerEhx5F+MI0uNiM7z1HYAKKv4/0PQY8UcyRWyBLHvUDURvaxOZFiYd9qElcZKU+fXhiGeGyhZF/BJrHMOCTwSRHLgu8qmulYGhYFgHpNB5iq1/wcX8=", "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:AS5PR10MB8243.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE;\n SFS:(13230040)(376014)(52116014)(366016)(1800799024)(38350700014)(56012099003)(18002099003);\n DIR:OUT; SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n Mv8+MdYq0649EUIJqp5Vh4tLsIPvCT5CrnhwhLQeXTuZsJXuczkWMpez1wR+YuifVNCw/1P4oYEOtr9MFux+8ILFQu0cPVAHa9Pwl390v6JfqvU9RFY4yXdF0WP5CryBYEfqDB1lalr4bSd0B0Oa0yacPnM3S9SvHa7UKXwdKs6E2fxqxmzGtJGNb3Bn/XQTNRfv1rTwfcHS3V2K2EkLNFW/NSNgzO0cl1jf2DWwnHUaaABC9qXYALcHwl1waI2RG3spqtoGESW1aewjP9pxFKnBf2yPjTV8lhkAjPe+LnozEYwR53VqcBUhXC9hMmADtfv9aXd+40PWAM2VR6Q+hhYyVDQMmWh9on87AO050iNM4vWDB/dMybNz1cYJm6Ji4NsZ8GQkzqJxfOj2yQMBI1u7FkAt4eeAk2+yjFdrEvXAxzvPAI1dPiasgIAYs9a+PtyVg5VfSTGoRplKMsGKEMtTIUYZDL6w4vhKPUlBFEmAcf22fmYNSMe5shTkVTlp/vJ3wc/zm9gI8D7VeqFatGMqPj6Af9B2dXNTRZHX09+ohOoDJ45dBOegKovkVGqk6AzT2KhXPqx18IgPj+iFoMjZ0rqFXoRIhJr9mZu/yshDRGbqqFSawcaMntDm6OV2xZEhvBq8ZRxz2JEiih2P9Q48TLELqCnN0mfGjsflRo8AtyCi01TyBKHADs1/qmFwyikfO0StCx9faBSzQyPS3nHcfetwa1y/LKNvXFme4WFMumP0xaklWgWrgQR8S3hfRYvodw63lJR8l/L63bfgkAF6+l/O0/fwq0Z5CXBBX+6f95QmufoV/uQmJywj8TDF3op2Ihqha4zgekqE8VxnjZycPI8Po6/+1zIdyJpUMVApi76kLAvUFwC+J952xhYvK9FTkDmjd7itDES7RNAO5g403qLce1d9WcyxSgkU8svEXYRLVtamYTZFiya/nk+6KJe12Ei1uJAIK9KOH407BwCVXZD8ZsSsh7oWUFC+iJV2kqOvTr/cb/okIgfPTeTRGec4PmasuyfRntxZgkPQ7jdR/ey4YVPWt9GB91iJWgWuVOLHPbjxIGOqRXa1Q7TI+6PzSt9a0FKdHtS23us4RBF9SYSA+HmfxMlhTt1Y5LmKeYS9WZTnjzVmx+BTPVpcQiKx4mMDS8Ra8uskOyMH5eD8M8sk9YMoovWD+1G1OT5Ts6mRx3i5fN83QPvRPVlIHK9cCZRabiuL5UT5l/hujZwYaE1gQ8lzhizTCld5G93ttw7WNigYwIf9KUCvEoYu5w0qEPxTS/uJxaWMK4sjGxIDkRsmb+PPYIRA3NlGx+RIMkC5Tjw/8tqlDbXXM4+C9xkmOE4NKH43H6V0Pz68W0taiJ6sbLBTdXhDPAJaA+h7FIGsjcW6Nw/WbVw8cGbqP+JqH2yJEWIlVScOYsJ1M1qAz6zUryxQ5iQnZG1V+kyPb9qoFJNzI93g3HMi/THRREJd90q8elAyMMdnVkGd8HivJPJs9da1nvMa5wnXZbYv3AvnsuO0bCMj/Aavh/l/0PsQU2LEZHFNuK32nC6/ZDZ04lLBhuNcy9+Wttfh6HQBV56YQY8e++xbHXAhx+SE+4XP4H3Ot+RaCbBUF4bRU8xQLsfnhwo1YLxLKweYJyTELRvnSnpw/jwMIzuodIGBjtTHScBC+xJ58iT7S4crETklfq8jq9N9e3bpHT487kkB3btMLd1bC5Qi7wdiEIbqQFdc7RxIBWIiyf2Z0oc1if5cz7P+5N8k90TbHh6FaLk=", "X-OriginatorOrg": "prevas.dk", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n a457416f-c996-4129-bcba-08de8e64f711", "X-MS-Exchange-CrossTenant-AuthSource": "AS5PR10MB8243.EURPRD10.PROD.OUTLOOK.COM", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Mar 2026 14:02:22.8690 (UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-CrossTenant-Id": "d350cf71-778d-4780-88f5-071a4cb1ed61", "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED", "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n CdeYqhDUXc4eakm+FP8ElKm3Ezzg1IBtE4pus3IRFz22zPWBMGNussHO1r/E5TsXAlx1C8WZwkAkvDidW7Zd+O4wfHzhoZEYnii4tTRb0u0=", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DU0PR10MB7508", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.39", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<https://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>", "X-Virus-Scanned": "clamav-milter 0.103.8 at phobos.denx.de", "X-Virus-Status": "Clean" }, "content": "It turns out that there is lots of code in the wild, including in the\nU-Boot tree itself, which used to rely on\n\n test -n $somevar\n\nto yield false when $somevar is not defined or empty. See for example\nall the occurrences of 'test -n $fdtfile'. That was really only a\nquirk of the implementation that refused calls with argc < 3, and not\nbecause it was interpreted as\n\n test -n \"$somevar\"\n\nwhich is how this should be spelled.\n\nWhile not exactly conforming to POSIX, we can accomodate such scripts\nby special-casing a single argument \"-n\" to be interpreted as if it\ncomes from code as above with empty $somevar.\n\nSince we only just added the ability to test a string for emptiness\nusing the single-argument form, it is very unlikely that there is code\ndoing\n\n test \"$str\"\n\nwhich would now fail if $str happens to be exactly \"-n\"; such a test\nshould really always be spelled\n\n test -n \"$str\"\n\nFixes: 8b0619579b2 (\"cmd: test: fix handling of single-argument form of test\")\nReported-by: Franz Schnyder <franz.schnyder@toradex.com>\nSigned-off-by: Rasmus Villemoes <ravi@prevas.dk>\n---\nI'm offline for the next 7+ days, so wanted to send this out now \nsince v2026.04 is about to be released and next merged to master.\n\nI'm not sure this is the best fix, an alternative is to just drop the\nargc < 3 support and rely on the previous quirk.\n\n cmd/test.c | 15 ++++++++++++++-\n test/hush/if.c | 8 ++++++++\n 2 files changed, 22 insertions(+), 1 deletion(-)", "diff": "diff --git a/cmd/test.c b/cmd/test.c\nindex 0d0f090386c..c76ebf800ee 100644\n--- a/cmd/test.c\n+++ b/cmd/test.c\n@@ -75,12 +75,25 @@ static int do_test(struct cmd_tbl *cmdtp, int flag, int argc,\n \t * Per POSIX, 'test' with 0 arguments should return 1, while\n \t * 'test <arg>' should be equivalent to 'test -n <arg>',\n \t * i.e. true if and only if <arg> is not empty.\n+\t *\n+\t * However, due to previous versions of U-Boot unconditionally\n+\t * returning false when 'test' was given less than two\n+\t * arguments, there are existing scripts that do\n+\t *\n+\t * test -n $somevar\n+\t *\n+\t * (i.e. without properly quoting $somevar) and expecting that\n+\t * to return false when $somevar expands to nothing. It is\n+\t * quite unlikely that anyone would use the single-argument\n+\t * form to test a string for being empty and a possible\n+\t * non-empty value for that string to be exactly \"-n\". So we\n+\t * interpret 'test -n' as if it was 'test -n \"\"'.\n \t */\n \tif (argc < 2)\n \t\treturn 1;\n \n \tif (argc == 2)\n-\t\treturn !strcmp(argv[1], \"\");\n+\t\treturn !strcmp(argv[1], \"\") || !strcmp(argv[1], \"-n\");\n \n #ifdef DEBUG\n \t{\ndiff --git a/test/hush/if.c b/test/hush/if.c\nindex 6129e2c530c..6117c37e53c 100644\n--- a/test/hush/if.c\n+++ b/test/hush/if.c\n@@ -41,6 +41,10 @@ static int hush_test_if_base(struct unit_test_state *uts)\n \tsprintf(if_formatted, if_format, \"test 'abc'\");\n \tut_assertok(run_command(if_formatted, 0));\n \n+\t/* Special case: 'test -n' interpreted as 'test -n \"\"'. */\n+\tsprintf(if_formatted, if_format, \"test '-n'\");\n+\tut_asserteq(1, run_command(if_formatted, 0));\n+\n \treturn 0;\n }\n HUSH_TEST(hush_test_if_base, 0);\n@@ -385,6 +389,10 @@ static int hush_test_lbracket_alias(struct unit_test_state *uts)\n \tut_asserteq(1, run_command(if_formatted, 0));\n \tut_assert_nextline(missing_rbracket_error);\n \n+\t/* Special case: '[ -n ]' interpreted as '[ -n \"\" ]'. */\n+\tsprintf(if_formatted, if_format, \"[ -n ]\");\n+\tut_asserteq(1, run_command(if_formatted, 0));\n+\n \treturn 0;\n }\n HUSH_TEST(hush_test_lbracket_alias, UTF_CONSOLE);\n", "prefixes": [] }