1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:57:45 +00:00

LibC: Deprecate strcpy(), strncpy(), strcat() and strncat() :^)

And also mark strlcpy() and strlcat() with __attribute__((warn_unused_result)).

Since our code is warning-free, this ensures we never misuse those functions.
(Or are very sure about doing it when turning off the warning for a particular
piece of code.)
This commit is contained in:
Sergey Bugaev 2020-08-25 17:48:52 +03:00 committed by Andreas Kling
parent 0106647ab8
commit f808810d00
3 changed files with 25 additions and 3 deletions

View file

@ -33,27 +33,40 @@ __BEGIN_DECLS
size_t strlen(const char*);
size_t strnlen(const char*, size_t maxlen);
int strcmp(const char*, const char*);
int strncmp(const char*, const char*, size_t);
int strcasecmp(const char*, const char*);
int strncasecmp(const char*, const char*, size_t);
int memcmp(const void*, const void*, size_t);
void* memcpy(void*, const void*, size_t);
void* memmove(void*, const void*, size_t);
void* memchr(const void*, int c, size_t);
const void* memmem(const void* haystack, size_t, const void* needle, size_t);
void bzero(void*, size_t);
void bcopy(const void*, void*, size_t);
void* memset(void*, int, size_t);
__attribute__((malloc)) char* strdup(const char*);
__attribute__((malloc)) char* strndup(const char*, size_t);
__attribute__((deprecated("use strlcpy or String::copy_characters_to_buffer")))
char* strcpy(char* dest, const char* src);
size_t strlcpy(char* dest, const char* src, size_t);
__attribute__((deprecated("use strlcpy or String::copy_characters_to_buffer")))
char* strncpy(char* dest, const char* src, size_t);
__attribute__((warn_unused_result)) size_t strlcpy(char* dest, const char* src, size_t);
char* strchr(const char*, int c);
char* strchrnul(const char*, int c);
char* strstr(const char* haystack, const char* needle);
char* strrchr(const char*, int c);
char* strcat(char* dest, const char* src);
char* strncat(char* dest, const char* src, size_t);
__attribute__((deprecated("use strlcat"))) char* strcat(char* dest, const char* src);
__attribute__((deprecated("use strlcat"))) char* strncat(char* dest, const char* src, size_t);
__attribute__((warn_unused_result)) size_t strlcat(char* dest, const char* src, size_t);
size_t strspn(const char*, const char* accept);
size_t strcspn(const char*, const char* reject);
char* strerror(int errnum);

View file

@ -95,6 +95,11 @@ static void ensure_caps()
caps->set("li", "25");
}
// Unfortunately, tgetstr() doesn't accept a size argument for the buffer
// pointed to by area, so we have to use bare strcpy().
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
char* tgetstr(const char* id, char** area)
{
ensure_caps();
@ -113,6 +118,8 @@ char* tgetstr(const char* id, char** area)
return nullptr;
}
#pragma GCC diagnostic pop
int tgetflag(const char* id)
{
(void)id;

View file

@ -37,6 +37,8 @@ asm("haxcode:\n"
extern "C" void haxcode();
extern "C" void haxcode_end();
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
int main()
{
char buffer[16384];