1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
/*
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
* Please see the COPYING and CONTRIBUTORS files for details.
*/
#ifndef SQUID_COMPAT_XSTRING_H
#define SQUID_COMPAT_XSTRING_H
#if HAVE_STRING_H
#include <string.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* xstrdup() - same as strdup(3). Used for portability.
* Never returns nullptr; fatal on error.
*
* Sets errno to EINVAL if a nullptr pointer is passed.
*
* Define failure_notify to receive error message.
* otherwise perror() is used to display it.
*/
char *xstrdup(const char *s);
#ifdef strdup
#undef strdup
#endif
#define strdup(X) xstrdup((X))
/*
* xstrncpy() - similar to strncpy(3) but terminates string
* always with '\0' if (n != 0 and dst != nullptr),
* and doesn't do padding
*/
char *xstrncpy(char *dst, const char *src, size_t n);
/**
* xstrndup() - Somewhat similar(XXX) to strndup(3): Allocates up to n bytes,
* while strndup(3) copies up to n bytes and allocates up to n+1 bytes
* to fit the terminating character. Assumes s is 0-terminated (another XXX).
*
* Never returns nullptr; fatal on error.
*
* Sets errno to EINVAL if a nullptr pointer or negative
* length is passed.
*
* Define failure_notify to receive error message.
* otherwise perror() is used to display it.
*/
char *xstrndup(const char *s, size_t n);
#ifdef strndup
#undef strndup
#endif
#define strndup(X) xstrndup((X))
#ifdef __cplusplus
}
#endif
#endif /* SQUID_COMPAT_XSTRING_H */
|