mirror of
git://git.musl-libc.org/musl
synced 2024-12-24 07:32:49 +00:00
separate getc/putc from fgetc/fputc
for conformance, two functions should not have the same address. a conforming program could use the addresses of getc and fgetc in ways that assume they are distinct. normally i would just use a wrapper, but these functions are so small and performance-critical that an extra layer of function call could make the one that's a wrapper nearly twice as slow, so I'm just duplicating the code instead.
This commit is contained in:
parent
3ffb556c58
commit
8fc7b5965a
@ -9,6 +9,3 @@ int fgetc(FILE *f)
|
||||
__unlockfile(f);
|
||||
return c;
|
||||
}
|
||||
|
||||
weak_alias(fgetc, getc);
|
||||
weak_alias(fgetc, _IO_getc);
|
||||
|
@ -8,6 +8,3 @@ int fputc(int c, FILE *f)
|
||||
__unlockfile(f);
|
||||
return c;
|
||||
}
|
||||
|
||||
weak_alias(fputc, putc);
|
||||
weak_alias(fputc, _IO_putc);
|
||||
|
13
src/stdio/getc.c
Normal file
13
src/stdio/getc.c
Normal file
@ -0,0 +1,13 @@
|
||||
#include "stdio_impl.h"
|
||||
|
||||
int getc(FILE *f)
|
||||
{
|
||||
int c;
|
||||
if (f->lock < 0 || !__lockfile(f))
|
||||
return getc_unlocked(f);
|
||||
c = getc_unlocked(f);
|
||||
__unlockfile(f);
|
||||
return c;
|
||||
}
|
||||
|
||||
weak_alias(getc, _IO_getc);
|
12
src/stdio/putc.c
Normal file
12
src/stdio/putc.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include "stdio_impl.h"
|
||||
|
||||
int putc(int c, FILE *f)
|
||||
{
|
||||
if (f->lock < 0 || !__lockfile(f))
|
||||
return putc_unlocked(c, f);
|
||||
c = putc_unlocked(c, f);
|
||||
__unlockfile(f);
|
||||
return c;
|
||||
}
|
||||
|
||||
weak_alias(putc, _IO_putc);
|
Loading…
Reference in New Issue
Block a user