From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/14805 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Alex Brachet-Mialot Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] Use open_memstream(3) for more efficient asprintf Date: Mon, 14 Oct 2019 02:56:36 -0400 Message-ID: References: Reply-To: musl@lists.openwall.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000004158890594d95ff4" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="260574"; mail-complaints-to="usenet@blaine.gmane.org" To: musl@lists.openwall.com Original-X-From: musl-return-14821-gllmg-musl=m.gmane.org@lists.openwall.com Mon Oct 14 08:57:05 2019 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.89) (envelope-from ) id 1iJuHx-0015fz-AK for gllmg-musl@m.gmane.org; Mon, 14 Oct 2019 08:57:05 +0200 Original-Received: (qmail 21961 invoked by uid 550); 14 Oct 2019 06:57:03 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 21925 invoked from network); 14 Oct 2019 06:57:02 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=F7zRf2OogT52neobyeGkdDFhh7Vtj8Y/jsM53IxcHhk=; b=L+xJXvHKpR7ALgyPRRPH1we1xiakc6wCUXcYrsyE6kSORSEDqXcpb2EB/hmt/wYjGr YHPJ8NV9s3xfgI9Co3E4wGxm+Qs24n5iEQjnjvYkjA1C0ROO77uK+AIqsDX5kv5yhSuv 9IKLZxcax4RfcPPVr4JjJHRPZZDZbJveHeUxUQaUb5Mg4zCNyBz9PIDmWK2YdnvM4i1z 4wQoZy4GA73n50Qw469qYcVN+4SzH+VyiyWxnOO0ZltfrMaXDX2uFPywhnZB/6szmp7a zldCXR6anH7CJqY3XH6mfdtrsQsnXym33z01O8pO2Iii9iv7pSTpCPfm3bmsh5Zka5fk OkVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=F7zRf2OogT52neobyeGkdDFhh7Vtj8Y/jsM53IxcHhk=; b=N2nVFgcqQ9oaENiC03R0ATFIkCp2L4dYkq5kqQ8ZDyV9P79VlLgAWNy3cfxu20uO1T 79b3Q+7C/XOXkSTPTi+vUS9SQQxOh3lHhIWQ4Bk5rGb4/Ma0H0TI7gIDQ6PJv0ZukYNC K2HCd4ANqjg8rql5kbX6MX/cSBiXCm0pUqLyKaDu2lyaeFMYGowy6d/DezNRYnl4S4fD GlPKeYTjnv2doxvTJDi6JK4xOdnDnWmuYEsu/VTO3jchgNBvLurXHwiOiFaq9G1HGeRJ /DMu2zjpwR8h76GcABuFDTAg0vnhaIQ62clcBHCMJAsB90RCbhYo034gF4lmIjj9bKQy g75w== X-Gm-Message-State: APjAAAVYCVEYQTYWtCaPQlT/c/LLcUlluRLUB+N46lDKYPktKwfvSBC7 7CILekdErjZbD+la8qmVwN9M3tjJTKOeU3VjgbXGvH/SwyI= X-Google-Smtp-Source: APXvYqylHBkIgKCFy9CaLmqtChC4UWN8Ie2Oly7Cd4DxdyxqZcRcTJya7ibXfcu46ytRd/81WvAoKP+cv53n4xLtjUk= X-Received: by 2002:a1f:2305:: with SMTP id j5mr15063492vkj.33.1571036210443; Sun, 13 Oct 2019 23:56:50 -0700 (PDT) In-Reply-To: Xref: news.gmane.org gmane.linux.lib.musl.general:14805 Archived-At: --0000000000004158890594d95ff4 Content-Type: text/plain; charset="UTF-8" That's strange, I looked on the archives and it looks like my attachment was in a weird format, something my email client did perhaps. Here it is copied I'll also try again with .txt extension so my mail client is less confused hopefully. Sorry about that. diff --git a/src/stdio/vasprintf.c b/src/stdio/vasprintf.c index 08251bc2..d55fe32f 100644 --- a/src/stdio/vasprintf.c +++ b/src/stdio/vasprintf.c @@ -5,11 +5,16 @@ int vasprintf(char **s, const char *fmt, va_list ap) { - va_list ap2; - va_copy(ap2, ap); - int l = vsnprintf(0, 0, fmt, ap2); - va_end(ap2); + size_t l; + *s = 0; + FILE *f = open_memstream(s, &l); + if (!f) + return -1; - if (l<0 || !(*s=malloc(l+1U))) return -1; - return vsnprintf(*s, l+1U, fmt, ap); + if ((l = vfprintf(f, fmt, ap)) == -1) { + free(*s); + *s = 0; + } + fclose(f); + return l; } On Mon, Oct 14, 2019 at 2:48 AM Alex Brachet-Mialot wrote: > > Hi I wasn't able to search the lists from the online archive, so I'm not sure if it has been talked about yet, but the current vasprintf implementation could be made better if it didn't call vsnprintf twice. Let me know what you think! --0000000000004158890594d95ff4 Content-Type: text/plain; charset="US-ASCII"; name="asprintf.txt" Content-Disposition: attachment; filename="asprintf.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k1q2d4ux0 ZGlmZiAtLWdpdCBhL3NyYy9zdGRpby92YXNwcmludGYuYyBiL3NyYy9zdGRpby92YXNwcmludGYu YwppbmRleCAwODI1MWJjMi4uZDU1ZmUzMmYgMTAwNjQ0Ci0tLSBhL3NyYy9zdGRpby92YXNwcmlu dGYuYworKysgYi9zcmMvc3RkaW8vdmFzcHJpbnRmLmMKQEAgLTUsMTEgKzUsMTYgQEAKIAogaW50 IHZhc3ByaW50ZihjaGFyICoqcywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQogewotCXZh X2xpc3QgYXAyOwotCXZhX2NvcHkoYXAyLCBhcCk7Ci0JaW50IGwgPSB2c25wcmludGYoMCwgMCwg Zm10LCBhcDIpOwotCXZhX2VuZChhcDIpOworCXNpemVfdCBsOworCSpzID0gMDsKKwlGSUxFICpm ID0gb3Blbl9tZW1zdHJlYW0ocywgJmwpOworCWlmICghZikKKwkJcmV0dXJuIC0xOwogCi0JaWYg KGw8MCB8fCAhKCpzPW1hbGxvYyhsKzFVKSkpIHJldHVybiAtMTsKLQlyZXR1cm4gdnNucHJpbnRm KCpzLCBsKzFVLCBmbXQsIGFwKTsKKwlpZiAoKGwgPSB2ZnByaW50ZihmLCBmbXQsIGFwKSkgPT0g LTEpIHsKKwkJZnJlZSgqcyk7CisJCSpzID0gMDsKKwl9CisJZmNsb3NlKGYpOworCXJldHVybiBs OwogfQo= --0000000000004158890594d95ff4--