From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS22989 209.51.188.0/24 X-Spam-Status: No, score=-3.7 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 803DE1F463 for ; Sun, 29 Dec 2019 21:25:15 +0000 (UTC) Received: from localhost ([::1]:55126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ilg3l-00026S-Du for normalperson@yhbt.net; Sun, 29 Dec 2019 16:25:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53962) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ilg3X-00025U-M1 for bug-gnulib@gnu.org; Sun, 29 Dec 2019 16:25:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ilg3W-0001gx-9O for bug-gnulib@gnu.org; Sun, 29 Dec 2019 16:24:59 -0500 Received: from mout.gmx.net ([212.227.15.15]:54821) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ilg3V-0001ev-S9 for bug-gnulib@gnu.org; Sun, 29 Dec 2019 16:24:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1577654695; bh=WPcKiYU8VOwdYVxusZOhwOQtZ0egn1p1tQ+ZG+PVDVY=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=NgjMstSS4Bp1PUBQ1hDMYxzFjWW4GMHODycHfxjvMdRYrEDLV6dPQiJY2yOMz6XsZ cIV9G/iLph5DJbbw9u0svjy4vhl4zGdSv6fPeCAp77lJ4D2g03pKFUu99i8WP55irB +f5O9nPtrNSz2h6LnmMznvcWkwUyiMDuwhIcLs8k= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.178.33] ([93.181.32.153]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MrhQ6-1jZKfz06q4-00nitl; Sun, 29 Dec 2019 22:24:55 +0100 Subject: Re: string types To: Bruno Haible , ag References: <175192568.e2XXTFFdkW@omega> <20191226221225.GA800@HATZ> <2179574.G9OhZXe8sF@omega> From: =?UTF-8?Q?Tim_R=c3=bchsen?= Autocrypt: addr=tim.ruehsen@gmx.de; prefer-encrypt=mutual; keydata= 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 Message-ID: <82e3e796-f32d-3318-56e8-15c9e2cc2866@gmx.de> Date: Sun, 29 Dec 2019 22:24:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <2179574.G9OhZXe8sF@omega> Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="Q0Tg4fDKcIrD7DFHGu9pBRn8Ci6jas0a9" X-Provags-ID: V03:K1:K5I4n8KSLgvLb89luQWSegvacVCcTNiQ6xFptKjjg+g+blfB3vi bb3dxxzNRVRCkALa1Vo8UsntGlAkS8MfyZ9oONjG1uZlh5x/796Bzr8M1pyTGlOh7F2Cib/ Yu1BYCYRwu+jUES0zSZQPD5jSTjLKfLYmitKDzRcXZzZ14ipzDv9TSUneU1CRbIMA2WPRRN 7x577kj6ZJHzJkeCWdI5Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:NBLc1ngrl3I=:AfNfjm7HJOlvX0B95hZu1Q DQWPibivLfqq1O7KctNjvzCRCPF7Max8JdIcFsnOWAzjJzjyIDAf+ZbDmlq/Uskvt/oaWdPJY oIJkC0vklSaV3qT0XciPn7HPoCZfdfZUrANUiDfW7kqgpQwincOdZs6/R91IqIF8ouSwl2P72 vbY1XyKXQiM2/6lSrVWTAGBgunXRqDKz6P1U6Few9GuaskUyJt7sNVoJNblCKV+xZSMIXXVaY MChSB4kR9WxHTTlkwJbuChrCqEKoWsXEnSYv7CPYnEXycCf4DXSbuMB761uP5DUff61PsK+1P 8mEr5h3YVTqexVrHLqcYSLJ8eiCHOGZeaNZdT/kjNVb71g7Dm8cf/AUa6HJpOgQHCD63srqoM H90UlvVxb4L4qMEdtdHEPRvEL2EONZ6VheETRJqRFom3WvwderMezsu6dwB2QeG5OpLkXLHLf IKiRaJIyXxxf7nvk4JRdV9+b+8X3g3sxnibW58jZWpaDFV78qz9mV/8PUn6DghlkJuZuGCJpk RP1dWRqkfABCY7jVyEgeV//kU23UBziPRpkATDCFgvOp7AGrg5slsrhGg+ec/TkmtzUdB9dM6 XM4a80Rjs15Wmx2SzdqhAEqYSe3KgxQDdLX8qxA1Nk9YHnojAEUKXccEsnVXyhoY6zafXscF5 8yYkvzOCQdOS3oYBpzROhbvfpWar1Fl31Tlm1mx5hqKvWw3ul04ZPLAhf+BB9TiB8HpeWK5Q+ iXZnUlvqC8fmEWDW84UJAgCpPazCuIa86ljB4cRklmSgVt/GlxVPV8V29WJHlRmZ0fp0pdprO SLTODpnEKK0TydeIg2AcGi+dZfSBLft6m3EP9hY8FodrBqMUC2Pa6b9xCdurhxeuO2d+4olpt tBMh2kXVAEgCdqg/tDZOYgcXCBSZzBtChAcyJzpzl/YVJDp57atzzbG54H8i4AAJopy6nkzyu Tz2L0E0cAiv6vxKXdMU/zEs1mc6o1stIHtIxZqF4WdoD3/R7Z1qkI0S0gFkO9I4YDuT00vb1T W4v5yv7ZnQYLSJO+Quzd/pok8gWIGCrcLuKw1klCbOsIgSQ0T++Pz5yBnC+rrV+AXFWDzaFhE yFFmQ+Y+Irc5cZ4V8Ehow4Br2gIIrynZZcTCAVmKLUmQf7TrOj9p48BeXKwE/53Sf5+jr38xf 8hr42A2QlmVHqqxxu2dVOcZwnbSvkLPgK50W4dr7FW+bzn1QXrOjQo2WCz8tN3lyNpCO2ji4/ WvVt/3AQloHpj+YkHcU0Wg0ff0wrvGKcJUXza93RXPP6+FUTWijrUUq8aGbw= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.15.15 X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bug-gnulib@gnu.org Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Sender: "bug-gnulib" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --Q0Tg4fDKcIrD7DFHGu9pBRn8Ci6jas0a9 Content-Type: multipart/mixed; boundary="mZ9p8pYBt6mJtS9td8aZfY6gEsnS5Nyxq" --mZ9p8pYBt6mJtS9td8aZfY6gEsnS5Nyxq Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable On 27.12.19 11:51, Bruno Haible wrote: > Aga wrote: >> I do not know if >> you can (or if it is possible, how it can be done), extract with a way= a specific >> a functionality from gnulib, with the absolute necessary code and only= that. >=20 > gnulib-tool does this. With its --avoid option, the developer can even = customize > their notion of "absolutely necessary". >=20 >> In a myriad of codebases a string type is implemented at least as: >> size_t mem_size; >> size_t num_bytes; >> char *bytes; >=20 > This is actually a string-buffer type. A string type does not need two = size_t > members. Long-term experience has shown that using different types for = string > and string-buffer is a win, because > - a string can be put in a read-only virtual memory area, thus enforc= ing > immutability (-> reducing multithread problems), > - providing primitives for string allocation reduces the amount of bu= ffer > overflow bugs that otherwise occur in this area. [1] > [1] https://lists.gnu.org/archive/html/bug-gnulib/2019-09/msg00031.html= > Just FYI, here is a string concatenation function without ellipsis, analogue to writev() and struct iovec - just a suggestion. Instead of 'struct strvec' a new string_t type would be handy. #include #include #include #include struct strvec { char *strv_base; size_t strv_len; }; __attribute__ ((nonnull (1))) char *concat_stringv(const struct strvec *strv) { const struct strvec *str; size_t len =3D 0; char *buf; for (str =3D strv; str->strv_base; str++) len +=3D str->strv_len; if (!(buf =3D malloc(len + 1))) return buf; len =3D 0; for (str =3D strv; str->strv_base; len +=3D str->strv_len, str++) memcpy(buf + len, str->strv_base, str->strv_len); buf[len] =3D 0; return buf; } void main(void) { char *s =3D concat_stringv((struct strvec []) { { "a", 1 }, { "b", 1 }, { NULL } }); puts(s); free(s); } In GNU Wget2 we already have type similar to string_t. Just used in cases where we need pointer + len of URLs inside const HTML/XML/CSS data.= typedef struct { const char *p; //!< pointer to memory region size_t len; //!< length of memory region } wget_string; So maybe we need a string_t and a const_string_t type !? (to avoid casting from const char *) Regards, Tim --mZ9p8pYBt6mJtS9td8aZfY6gEsnS5Nyxq-- --Q0Tg4fDKcIrD7DFHGu9pBRn8Ci6jas0a9 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEHLJ9vJhhSy1YQWRtCDAttqJnBCgFAl4JGaMACgkQCDAttqJn BCjFxw/+LThvklxqWlXWff1B/HXZiHfk6yPzB2lCHv9pNmKAMfR58hgziGj+v4ec zp766xO0rlpvm1ukcS8HlhTfssEU570z5HuEo0d5FRPTuQjOZQdCaKK9Au8CAelV ZdcbtrUoVO8F6vYjIpd99fPNOyZlIZROUbgbU+Ir3mJwLNs3szkGHAWYeLVQjEKF qfV4qUyo8ByuCf7XzaBYFIxtxkBqEVoNFI4bULKnZKuWv/JNDwk6En9ggBaH6oHb khWzwncQ3BCZTGAuaDFZpcZsbw4vIRm2zTO5YPCrmx8vibgwrWRVfT0zk2U4wXYj fU5epVPhXG3UZs52ycldrTHEpMjDb6GgXP30UfA/mmDuFdhbnF7wMosFOOhOUCIL plfPqWPYMdE56frxxbGJci0CYtZbMXEMmdlTFRGOYkxhzGHUqxBFPXbsUu377GSd EaCg54JwmyYHFKnERXJTB0q2MIQ9RB5L88SpDcevK72E4DhcqL9rFHM9wBNKw5c0 CUiSxo4/vJapEcVCTM+8wWpIX//Mu4aIWEmDAK6GkU6ZR0En1k/d5dcGE+7K01jt s7iFP8XWvDQWZdgZOj90CXQJEEhwaVRjxYWNcPh/njEzdgGaL9O6SYMPApTd89G7 sxJSu3bhUHS0Mb0hww+LsZZKmLgAxx29XoTG/IPv+GDDEWcV380= =gY8x -----END PGP SIGNATURE----- --Q0Tg4fDKcIrD7DFHGu9pBRn8Ci6jas0a9--