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.
__unlockfile(f);
return c;
}
-
-weak_alias(fgetc, getc);
-weak_alias(fgetc, _IO_getc);
__unlockfile(f);
return c;
}
-
-weak_alias(fputc, putc);
-weak_alias(fputc, _IO_putc);
--- /dev/null
+#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);
--- /dev/null
+#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);