Make fclose/pclose distinct.
I failed to convince the compiler/linker to just refrain (via factoring out, attribute `noinline`, or meddling with `--icf=none`), but luckily I noticed that we should have CHECK_FP in each function for a better error message, and the distinct error messages keep the two functions apart. (Also add a missing CHECK_FP to `clearerr_unlocked`.) Bug: http://b/116969207 Test: manual with a modified `crasher` Change-Id: Ic122e90e94f7e22f486be57d3dac7137a225d682
This commit is contained in:
parent
7208139406
commit
22917f63ee
1 changed files with 12 additions and 3 deletions
|
@ -404,8 +404,7 @@ FILE* freopen(const char* file, const char* mode, FILE* fp) {
|
|||
}
|
||||
__strong_alias(freopen64, freopen);
|
||||
|
||||
int fclose(FILE* fp) {
|
||||
CHECK_FP(fp);
|
||||
static int __FILE_close(FILE* fp) {
|
||||
if (fp->_flags == 0) {
|
||||
// Already freed!
|
||||
errno = EBADF;
|
||||
|
@ -440,7 +439,11 @@ int fclose(FILE* fp) {
|
|||
fp->_flags = 0;
|
||||
return r;
|
||||
}
|
||||
__strong_alias(pclose, fclose);
|
||||
|
||||
int fclose(FILE* fp) {
|
||||
CHECK_FP(fp);
|
||||
return __FILE_close(fp);
|
||||
}
|
||||
|
||||
int fileno_unlocked(FILE* fp) {
|
||||
CHECK_FP(fp);
|
||||
|
@ -459,6 +462,7 @@ int fileno(FILE* fp) {
|
|||
}
|
||||
|
||||
void clearerr_unlocked(FILE* fp) {
|
||||
CHECK_FP(fp);
|
||||
return __sclearerr(fp);
|
||||
}
|
||||
|
||||
|
@ -1235,6 +1239,11 @@ FILE* popen(const char* cmd, const char* mode) {
|
|||
return fp;
|
||||
}
|
||||
|
||||
int pclose(FILE* fp) {
|
||||
CHECK_FP(fp);
|
||||
return __FILE_close(fp);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
namespace phony {
|
||||
|
|
Loading…
Reference in a new issue