From: Alejandro Colomar <alx.manpages@gmail.com>
To: libc-alpha@sourceware.org
Cc: Alejandro Colomar <alx@kernel.org>
Subject: Re: [PATCH v2 1/3] string: Add stpecpy()
Date: Thu, 29 Dec 2022 00:27:04 +0100 [thread overview]
Message-ID: <2fb1729b-f3e8-4223-2524-8bc8164eb606@gmail.com> (raw)
In-Reply-To: <20221228231741.125945-2-alx@kernel.org>
[-- Attachment #1.1: Type: text/plain, Size: 3908 bytes --]
stpecpy(3) Library Functions Manual stpecpy(3)
NAME
stpecpy - copy a string with truncation
LIBRARY
stp string library (libstp, pkgconf ‐‐cflags ‐‐libs libstp)
SYNOPSIS
#include <stp/stpe/stpecpy.h>
char *_Nullable stpecpy(char *_Nullable dst, char end[0],
const char *restrict src);
DESCRIPTION
This function copies the string pointed to by src, into a string at the
buffer pointed to by dst. If the destination buffer, limited by a
pointer to its end —one after its last element—, isn’t large enough to
hold the copy, the resulting string is truncated.
This function can be chained with calls to stpeprintf(3) and
vstpeprintf(3).
An implementation of this function might be
/* This code is in the public domain. */
char *
stpecpy(char *dst, char end[0], const char *restrict src)
{
char *p;
if (dst == end || dst == NULL)
return dst;
p = memccpy(dst, src, '\0', end - dst);
if (p != NULL)
return p - 1;
/* truncation detected */
end[-1] = '\0';
return end;
}
RETURN VALUE
NULL If dst was NULL.
end
• If this call truncated.
• If dst was equal to end (a previous call to this function
truncated).
dst + strlen(dst)
On success, this function returns a pointer to the terminating
null byte.
ATTRIBUTES
For an explanation of the terms used in this section, see attrib‐
utes(7).
┌────────────────────────────────────────────┬───────────────┬─────────┐
│Interface │ Attribute │ Value │
├────────────────────────────────────────────┼───────────────┼─────────┤
│stpecpy(3) │ Thread safety │ MT‐Safe │
└────────────────────────────────────────────┴───────────────┴─────────┘
STANDARDS
None.
EXAMPLES
$ cc ./stpecpy.c $(pkgconf --cflags --libs libbsd-overlay libstp)
$ ./a.out
[len = 12]: Hello world!
$
// stpecpy.c
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <stp/stpe/stpecpy.h>
#include <stp/stpe/stpeprintf.h>
int
main(void)
{
char *p, *end;
char buf[BUFSIZ];
size_t len;
end = buf + BUFSIZ;
p = buf;
p = stpecpy(p, end, "Hello, ");
p = stpeprintf(p, end, "%d worlds", 22);
p = stpecpy(p, end, "!");
if (p == NULL)
err(EXIT_FAILURE, "stpeprintf()");
if (p == end) {
p--;
warnx("Truncated");
}
len = p - buf;
printf("[len = %zu]: ", len);
puts(buf);
exit(EXIT_SUCCESS);
}
SEE ALSO
stpeprintf(3), string_copying(7)
libstp (unreleased) (date) stpecpy(3)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2022-12-28 23:27 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-22 21:42 [PATCH 0/1] string: Add stpecpy(3) Alejandro Colomar
2022-12-22 21:42 ` [PATCH 1/1] " Alejandro Colomar
2022-12-23 7:02 ` Sam James
2022-12-23 12:26 ` Alejandro Colomar
2022-12-23 12:29 ` Alejandro Colomar
2022-12-23 17:21 ` Alejandro Colomar
2022-12-31 15:13 ` Sam James
2022-12-31 15:15 ` Alejandro Colomar
2022-12-28 23:17 ` [PATCH v2 0/3] Add stpe*() functions Alejandro Colomar
2022-12-29 0:01 ` Zack Weinberg
2022-12-29 10:13 ` Alejandro Colomar
2022-12-28 23:17 ` [PATCH v2 1/3] string: Add stpecpy() Alejandro Colomar
2022-12-28 23:27 ` Alejandro Colomar [this message]
2022-12-28 23:17 ` [PATCH v2 2/3] stdio: Add vstpeprintf() Alejandro Colomar
2022-12-28 23:17 ` [PATCH v2 3/3] stdio: Add stpeprintf() Alejandro Colomar
2022-12-28 23:27 ` Alejandro Colomar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2fb1729b-f3e8-4223-2524-8bc8164eb606@gmail.com \
--to=alx.manpages@gmail.com \
--cc=alx@kernel.org \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).