From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ken Brown Newsgroups: gmane.emacs.bugs Subject: bug#49524: 28.0.50; make-serial-process is not portable Date: Mon, 12 Jul 2021 09:27:44 -0400 Message-ID: <8bf20bb2-ca96-3ee5-01e2-ec8b00cc8c91@cornell.edu> References: <82e72be1-9907-c08f-0c1d-d625e914a902@cornell.edu> <834kd0byy5.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------C6E53845111F86154969E544" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33016"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 Cc: 49524@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jul 12 15:43:26 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m2wDV-0008Pl-R8 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 12 Jul 2021 15:43:26 +0200 Original-Received: from localhost ([::1]:44794 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m2wDU-0007Ud-Oq for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 12 Jul 2021 09:43:24 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:53950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m2vza-000398-1v for bug-gnu-emacs@gnu.org; Mon, 12 Jul 2021 09:29:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:53499) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m2vzZ-0002zT-Pa for bug-gnu-emacs@gnu.org; Mon, 12 Jul 2021 09:29:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1m2vzZ-0002tQ-NY for bug-gnu-emacs@gnu.org; Mon, 12 Jul 2021 09:29:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ken Brown Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 12 Jul 2021 13:29:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 49524 X-GNU-PR-Package: emacs Original-Received: via spool by 49524-submit@debbugs.gnu.org id=B49524.162609648311036 (code B ref 49524); Mon, 12 Jul 2021 13:29:01 +0000 Original-Received: (at 49524) by debbugs.gnu.org; 12 Jul 2021 13:28:03 +0000 Original-Received: from localhost ([127.0.0.1]:36806 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m2vyc-0002rw-O2 for submit@debbugs.gnu.org; Mon, 12 Jul 2021 09:28:03 -0400 Original-Received: from mail-dm6nam12on2099.outbound.protection.outlook.com ([40.107.243.99]:49793 helo=NAM12-DM6-obe.outbound.protection.outlook.com) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m2vya-0002rc-NH for 49524@debbugs.gnu.org; Mon, 12 Jul 2021 09:28:01 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XKBlFf2J1y47h1Tl9VdMwM2vSRpXbYgdhnLFUqiYB+zqLmxD9AcYbDJLXHFYeAs9Y7tmgqoYev9N8VC0HdSbtfzYBRYfTWdyZFXNTtvp56DnaRRoXLZsLLgmGJpLpJMTs44PObjBZtKpV7ztjq4YB7yEVcHdKJ0e2cGBGG8OQ3ww4R1B4fq72oZzq02EC2kXKulytwxUnOpHQuAMNIV/NSyjWUfDkCn+ki8VuimqRYZoLGRwajA/LDjV/ZMAUEh4BZOEP58LaBToIuyTZLAfHHZEsEQQ2sMfKXhVL2zVayb/0pqhx+uHWxLMHV3TK8j3k734IQ3ze/4T0prXKIv0Rg== 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=OTP07Y73moa72JhxT51l4GUgT+kUMHiL++4isdnIBA4=; b=gE6wb/vpUPFfmhpEs9mJWZ5zKyXqzh6DEo3GUG1MjeX5r68IZjPLdKiOwEsy8I0D9ztH59l9CnNKfm1VAReUpOs7uOEbkYvrpBy3XwoQqPknTtGb2yJBawsQi91BCrB61QWxiPtykZJKMa8Zwwl4bwgSlqTmcoHeyNP5TD59TJ9WMmV32vUjDkEJT16CJSMUmYZJggytze0enVzZ7FdubFoWVs6xjVgYQPOIDNvbpgGHIIbVK8RRVkrt38vn6bwYrA3JNG+E0FUtmKP7BQSQaDMf8NVqBcV+KMrpksKoXQbFRlVkvBhBVbjTWD2KR7oZQk5CrRMJpJpcu6LO2PjhyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cornell.edu; dmarc=pass action=none header.from=cornell.edu; dkim=pass header.d=cornell.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cornell.edu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OTP07Y73moa72JhxT51l4GUgT+kUMHiL++4isdnIBA4=; b=IWoJ1PM+li0YpSw6ZGlk5S2tSjGZvtloKJGhj8+5rTct+7MWFtoAnCzbGo4YweYV/L+A0fhu908AONgFYnKKHToF4+hVu0YrRVGTi4g91ovK78OHCaxSpg35OBVNHBHPxL482sRgbj0+aIxtPgMk619iVQJVrLN9QldrIM2gfl8= Authentication-Results: debbugs.gnu.org; dkim=none (message not signed) header.d=none;debbugs.gnu.org; dmarc=none action=none header.from=cornell.edu; Original-Received: from BN7PR04MB4388.namprd04.prod.outlook.com (2603:10b6:406:f8::19) by BN3PR04MB2180.namprd04.prod.outlook.com (2a01:111:e400:7bb8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Mon, 12 Jul 2021 13:27:52 +0000 Original-Received: from BN7PR04MB4388.namprd04.prod.outlook.com ([fe80::cda2:359c:cb66:5c42]) by BN7PR04MB4388.namprd04.prod.outlook.com ([fe80::cda2:359c:cb66:5c42%7]) with mapi id 15.20.4308.021; Mon, 12 Jul 2021 13:27:48 +0000 In-Reply-To: <834kd0byy5.fsf@gnu.org> Content-Language: en-US X-ClientProxiedBy: MN2PR05CA0013.namprd05.prod.outlook.com (2603:10b6:208:c0::26) To BN7PR04MB4388.namprd04.prod.outlook.com (2603:10b6:406:f8::19) X-MS-Exchange-MessageSentRepresentingType: 1 Original-Received: from [192.168.0.18] (24.194.34.31) by MN2PR05CA0013.namprd05.prod.outlook.com (2603:10b6:208:c0::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.12 via Frontend Transport; Mon, 12 Jul 2021 13:27:46 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: be8a66c6-323a-4acc-5e6d-08d94538d69c X-MS-TrafficTypeDiagnostic: BN3PR04MB2180: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kXpsRElX6g8QmUJn2zwIMYOK/jZ5LZGeXbYA8XBZHkZPeaJllh6zVg36BvqT9y8IGgkC5IQpe8WcavJwzL7S3nwi2CTUYXr6b65PGVgiMCDyVslhKZ3M6kGKhnmiwZrqCp6LgCAQSUGUISKfuPj6w+1nZ7O4farkFzgxa8oMxmw4hnLZ3aoxqqE7J3aAnMaSV5O81DGk3Yy8dOIGiHq2+fykGNijp1edfzhfv8JMbjJ90R09Y8/qbIK5QLkr2xg8QrtSh6FtzcAdOxgF1d5NjOBYEx+Hsxzx2LST9RxD70Je6UpglTSUGYsnBbh8VeD8FBpXcV7pHhOviImd1B0HBR8O35lI6a6s9fk65A/NCp9olHkmYFUvtCJQWDNs2KLOY8NhPJoSgzm3BIJnO1x7sJvJA9leOZ21sZCBTjg7Tio8E8zFtGMuPX6O6WYz/j4cu6xKqnD8lysrw/IgKI6iNJ0X21H+A+1deobuD+PHbGwoiCULFWcAarZGOpBcY+vxqXvA2tNw5GYI9WE2LiFx9OSf60rcQLL5iVW3Jf+46NdlXQz9ms0diGcjw/BIHpEA06DTgCq/h2RMnJzkq2KugcO+6Ml4Yw5FxbMzBVgk4DD7o8gqNKkJLbmQ9tftfxycCgn7orrX0ub4BQNkgCJ9cm9Ej0UNnBOIMcFCIWCyQLWG03idOJG5keAHphDjoqCVMjvid1f7IFNMEszGfizKJXLnwQDYh4Q0a1jMa2yDTUOBddoStEKPZlC74Uyhe tlUGfjzC5ruOvL5UOH/7HoPEhtci5AuEMBm8Fs/BQn+pJbn55naSKiGuf9K+SVO7DUh X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN7PR04MB4388.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(376002)(346002)(136003)(39860400002)(396003)(75432002)(33964004)(966005)(786003)(316002)(235185007)(6486002)(6916009)(66476007)(66616009)(66556008)(4326008)(66946007)(5660300002)(86362001)(16576012)(956004)(38100700002)(2616005)(31696002)(26005)(8676002)(36756003)(8936002)(53546011)(31686004)(2906002)(186003)(478600001)(43740500002)(45980500001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: WwcJV9kyU495FxksB7VBTW+CSx18islEa+I/T/x6TUJwLRnSCp0PeHJuJLnePjZIT4xKQzVvUqxU50NhmqPONQBcO4IcPh2QU5px7MLnfsq8MN2ZOZEd4tXjzpCzD9FrrJNc63yje2ZOM8Gf7uEh2jO+DaPP5KPY6NIzaRFiwTDMiB6K6bAoYaAcmmh/MMYLaMvNbGc4fBjWdhI0BCYC/eFFvS7x9fDlqiHlhCul8N8Bb41qEWPaMmoN/5JMLUvuJdlwPJWNluAxR/8U6kA10TaEBh2EzpW461oKPxoTtXCjwI3i1OyDkniXRet0UY0371nNjLZYfzF/xzIW6rGwZHHmBRY02rxyT8oVRoEApYLAKgJzo1RKVAoUNofPU07NLVbAHE1fzyDLLsUS2k3nPiOn0sn5mJOe3485yQK3whiR881/+OrAeQCtWTz4UHY1yhPfOiMCFaYD8WC++Iwaotdz5k4ue82WTlvHgCFZ8bBiqgPubGVh8Ub6+B56YxlbhPo3nyPH2HC8WQ4KY6l4vxrWoIKTgZFV68udQvwARmbXv+rObjh/VvWEZIQ/Huf9T7kA7HfoFRLc5qwJB/Ayc3cLG0lCGcjZvrgjXCwvErCvL/inbyjk7gCfVt6KkorY79ZdUACi7UjPZE7ufiHz2lsg9G6XZxhpoJvKc4eXwnmJgWtJ6IrHgycmMI4yE0MwXJPCBDt14Kignl239RwQmhN1Pnu96jHbP56BAahDX22KQyoIzrMEVk1zgk cWFE69gvTPaesZ2tPiepUKcpYH4OTOeHH4bBhdVU2sme9CCtNErOMeTF0/6Ksx8xpCyw6qkE9GNiBJ68Ap6eeEAdtGrc7FkKNi X-OriginatorOrg: cornell.edu X-MS-Exchange-CrossTenant-Network-Message-Id: be8a66c6-323a-4acc-5e6d-08d94538d69c X-MS-Exchange-CrossTenant-AuthSource: BN7PR04MB4388.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 13:27:48.4764 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5d7e4366-1b9b-45cf-8e79-b14b27df46e1 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: po6GXbo/sF/Lo9eyBsdDgYO3AxyzsbuhaVJagpKEvFBu7N0tH7OlkEPzjGpcjAJeEw3+HPJ2+9Ohei4B6YyOEA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR04MB2180 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:209819 Archived-At: --------------C6E53845111F86154969E544 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 7/11/2021 12:24 PM, Eli Zaretskii wrote: >> From: Ken Brown >> Date: Sun, 11 Jul 2021 11:24:58 -0400 >> >> Fmake_serial_process calls Fserial_process_configure, which calls >> serial_configure, which calls cfsetspeed with the speed argument equal to the >> numerical baud rate (e.g., 9600). But the documentation of cfsetspeed says that >> the speed argument must be one of the Bnnn constants defined in termios.h (e.g., >> B9600). See, for example, >> >> https://man7.org/linux/man-pages/man3/termios.3.html >> >> This incorrect call of cfsetspeed happens to succeed on GNU/Linux because >> glibc's cfsetspeed allows the argument to be the numerical baud rate, which it >> converts to the appropriate Bnnn constant. But I don't think emacs should be >> relying on this undocumented behavior. In particular, this doesn't work on >> Cygwin. And it wouldn't even work on GNU/Linux if emacs used the cfsetspeed >> replacement defined in sysdep.c instead of glibc's cfsetspeed. >> >> I think the way to fix this is to imitate the glibc code that converts the baud >> rate to a Bnnn constant, but maybe someone has a better idea. > > Converting in sysdep.c:serial_configure sounds TRT to me. Patch attached. Ken --------------C6E53845111F86154969E544 Content-Type: text/plain; charset=UTF-8; name="0001-Fix-portability-issue-with-make-serial-process.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Fix-portability-issue-with-make-serial-process.patch" >From aeda8d9e4432e5fac627341968e84c98f4df70bd Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Mon, 12 Jul 2021 09:24:12 -0400 Subject: [PATCH] Fix portability issue with make-serial-process * src/sysdep.c (struct speed_struct): New struct. (speeds): New static array of struct speed_struct. (convert_speed): New static function to convert a numerical baud rate (e.g., 9600) to a Bnnn constant defined in termios.h (e.g., B9600). (serial_configure): Use convert_speed to avoid cfsetspeed errors on non-glibc platforms. (Bug#49524) --- src/sysdep.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) diff --git a/src/sysdep.c b/src/sysdep.c index b8ec22d9dd..8eaee22498 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -2744,6 +2744,138 @@ cfsetspeed (struct termios *termios_p, speed_t vitesse) } #endif +/* The following is based on the glibc implementation of cfsetspeed. */ + +struct speed_struct +{ + speed_t value; + speed_t internal; +}; + +static const struct speed_struct speeds[] = + { +#ifdef B0 + { 0, B0 }, +#endif +#ifdef B50 + { 50, B50 }, +#endif +#ifdef B75 + { 75, B75 }, +#endif +#ifdef B110 + { 110, B110 }, +#endif +#ifdef B134 + { 134, B134 }, +#endif +#ifdef B150 + { 150, B150 }, +#endif +#ifdef B200 + { 200, B200 }, +#endif +#ifdef B300 + { 300, B300 }, +#endif +#ifdef B600 + { 600, B600 }, +#endif +#ifdef B1200 + { 1200, B1200 }, +#endif +#ifdef B1200 + { 1200, B1200 }, +#endif +#ifdef B1800 + { 1800, B1800 }, +#endif +#ifdef B2400 + { 2400, B2400 }, +#endif +#ifdef B4800 + { 4800, B4800 }, +#endif +#ifdef B9600 + { 9600, B9600 }, +#endif +#ifdef B19200 + { 19200, B19200 }, +#endif +#ifdef B38400 + { 38400, B38400 }, +#endif +#ifdef B57600 + { 57600, B57600 }, +#endif +#ifdef B76800 + { 76800, B76800 }, +#endif +#ifdef B115200 + { 115200, B115200 }, +#endif +#ifdef B153600 + { 153600, B153600 }, +#endif +#ifdef B230400 + { 230400, B230400 }, +#endif +#ifdef B307200 + { 307200, B307200 }, +#endif +#ifdef B460800 + { 460800, B460800 }, +#endif +#ifdef B500000 + { 500000, B500000 }, +#endif +#ifdef B576000 + { 576000, B576000 }, +#endif +#ifdef B921600 + { 921600, B921600 }, +#endif +#ifdef B1000000 + { 1000000, B1000000 }, +#endif +#ifdef B1152000 + { 1152000, B1152000 }, +#endif +#ifdef B1500000 + { 1500000, B1500000 }, +#endif +#ifdef B2000000 + { 2000000, B2000000 }, +#endif +#ifdef B2500000 + { 2500000, B2500000 }, +#endif +#ifdef B3000000 + { 3000000, B3000000 }, +#endif +#ifdef B3500000 + { 3500000, B3500000 }, +#endif +#ifdef B4000000 + { 4000000, B4000000 }, +#endif + }; + +/* Convert a numerical speed (e.g., 9600) to a Bnnn constant (e.g., + B9600); see bug#49524. */ +static speed_t +convert_speed (speed_t speed) +{ + for (size_t i = 0; i < sizeof speeds / sizeof speeds[0]; i++) + { + if (speed == speeds[i].internal) + return speed; + else if (speed == speeds[i].value) + return speeds[i].internal; + } + return speed; +} + /* For serial-process-configure */ void serial_configure (struct Lisp_Process *p, @@ -2775,7 +2907,7 @@ serial_configure (struct Lisp_Process *p, else tem = Fplist_get (p->childp, QCspeed); CHECK_FIXNUM (tem); - err = cfsetspeed (&attr, XFIXNUM (tem)); + err = cfsetspeed (&attr, convert_speed (XFIXNUM (tem))); if (err != 0) report_file_error ("Failed cfsetspeed", tem); childp2 = Fplist_put (childp2, QCspeed, tem); -- 2.32.0 --------------C6E53845111F86154969E544--