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:
Rich Felker 2012-10-27 19:52:40 -04:00
parent 3ffb556c58
commit 8fc7b5965a
4 changed files with 25 additions and 6 deletions

View File

@ -9,6 +9,3 @@ int fgetc(FILE *f)
__unlockfile(f);
return c;
}
weak_alias(fgetc, getc);
weak_alias(fgetc, _IO_getc);

View File

@ -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
View 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
View 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);