mirror of git://git.musl-libc.org/musl
omit declaration of basename wrongly interpreted as prototype in C++
the non-prototype declaration of basename in string.h is an ugly compromise to avoid breaking 2 types of broken software: 1. programs which assume basename is declared in string.h and thus would suffer from dangerous pointer-truncation if an implicit declaration were used. 2. programs which include string.h with _GNU_SOURCE defined but then declare their own prototype for basename using the incorrect GNU signature for the function (which would clash with a correct prototype). however, since C++ does not have non-prototype declarations and interprets them as prototypes for a function with no arguments, we must omit it when compiling C++ code. thankfully, all known broken apps that suffer from the above issues are written in C, not C++.
This commit is contained in:
parent
0e195dfaa4
commit
37bb3cce45
|
@ -85,8 +85,10 @@ char *strcasestr(const char *, const char *);
|
||||||
char *strsep(char **, const char *);
|
char *strsep(char **, const char *);
|
||||||
void *memrchr(const void *, int, size_t);
|
void *memrchr(const void *, int, size_t);
|
||||||
void *mempcpy(void *, const void *, size_t);
|
void *mempcpy(void *, const void *, size_t);
|
||||||
|
#ifndef __cplusplus
|
||||||
char *basename();
|
char *basename();
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue