summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2020-08-14 16:27:35 -0400
committerJakob Kaivo <jkk@ung.org>2020-08-14 16:27:35 -0400
commit22f4c7005e9ca07a493f84eac2f529ec369649f3 (patch)
tree93f4ece4d9abe128705ad42c7842605b04e0869e
parenta4a288cb5dedb82def5e2c2193bd6e9f4a399194 (diff)
add __pwd.c for <pwd.h> internal state
-rw-r--r--.deps.mk12
-rw-r--r--.deps/all.c1
-rw-r--r--.deps/libc.POSIX_11
-rw-r--r--.deps/libc.POSIX_1995064
-rw-r--r--src/pwd/__pwd.c18
-rw-r--r--src/pwd/_pwd.h29
6 files changed, 64 insertions, 1 deletions
diff --git a/.deps.mk b/.deps.mk
index 87a92bc8..e8cbf622 100644
--- a/.deps.mk
+++ b/.deps.mk
@@ -721,6 +721,10 @@ libc.a(perror.o): $(OBJDIR)/perror.o
$(OBJDIR)/perror.o: ./src/stdio/perror.c
$(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/perror.c -o $@
echo [CC] $@
+libc.a(putc_unlocked.o): $(OBJDIR)/putc_unlocked.o
+$(OBJDIR)/putc_unlocked.o: ./src/stdio/putc_unlocked.c
+ $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/putc_unlocked.c -o $@
+ echo [CC] $@
libc.a(fscanf.o): $(OBJDIR)/fscanf.o
$(OBJDIR)/fscanf.o: ./src/stdio/fscanf.c
$(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/fscanf.c -o $@
@@ -753,6 +757,10 @@ libc.a(ungetc.o): $(OBJDIR)/ungetc.o
$(OBJDIR)/ungetc.o: ./src/stdio/ungetc.c
$(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/ungetc.c -o $@
echo [CC] $@
+libc.a(getc_unlocked.o): $(OBJDIR)/getc_unlocked.o
+$(OBJDIR)/getc_unlocked.o: ./src/stdio/getc_unlocked.c
+ $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/getc_unlocked.c -o $@
+ echo [CC] $@
libc.a(putw.o): $(OBJDIR)/putw.o
$(OBJDIR)/putw.o: ./src/stdio/putw.c
$(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/putw.c -o $@
@@ -1489,6 +1497,10 @@ libm.a(clog.o): $(OBJDIR)/clog.o
$(OBJDIR)/clog.o: ./src/complex/clog.c
$(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/complex/clog.c -o $@
echo [CC] $@
+libc.a(__pwd.o): $(OBJDIR)/__pwd.o
+$(OBJDIR)/__pwd.o: ./src/pwd/__pwd.c
+ $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/pwd/__pwd.c -o $@
+ echo [CC] $@
libc.a(getpwent.o): $(OBJDIR)/getpwent.o
$(OBJDIR)/getpwent.o: ./src/pwd/getpwent.c
$(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/pwd/getpwent.c -o $@
diff --git a/.deps/all.c b/.deps/all.c
index cb5baf4e..bc3c2820 100644
--- a/.deps/all.c
+++ b/.deps/all.c
@@ -1113,6 +1113,7 @@
./src/complex/csinh.c
./src/complex/cabs.c
./src/complex/clog.c
+./src/pwd/__pwd.c
./src/pwd/getpwent.c
./src/pwd/setpwent.c
./src/pwd/getpwnam.c
diff --git a/.deps/libc.POSIX_1 b/.deps/libc.POSIX_1
index e26c9303..7868d0b8 100644
--- a/.deps/libc.POSIX_1
+++ b/.deps/libc.POSIX_1
@@ -74,6 +74,7 @@ libc_POSIX_1_OBJS= \
libc.a($(OBJDIR)/opendir.o) \
libc.a($(OBJDIR)/rewinddir.o) \
libc.a($(OBJDIR)/readdir.o) \
+ libc.a($(OBJDIR)/__pwd.o) \
libc.a($(OBJDIR)/getpwnam.o) \
libc.a($(OBJDIR)/getpwuid.o) \
libc.a($(OBJDIR)/cfsetospeed.o) \
diff --git a/.deps/libc.POSIX_199506 b/.deps/libc.POSIX_199506
index 5e7f2b11..8ab81154 100644
--- a/.deps/libc.POSIX_199506
+++ b/.deps/libc.POSIX_199506
@@ -3,4 +3,6 @@ libc_POSIX_199506_OBJS= \
libc.a($(OBJDIR)/funlockfile.o) \
libc.a($(OBJDIR)/getchar_unlocked.o) \
libc.a($(OBJDIR)/flockfile.o) \
- libc.a($(OBJDIR)/putchar_unlocked.o) \ No newline at end of file
+ libc.a($(OBJDIR)/putchar_unlocked.o) \
+ libc.a($(OBJDIR)/putc_unlocked.o) \
+ libc.a($(OBJDIR)/getc_unlocked.o) \ No newline at end of file
diff --git a/src/pwd/__pwd.c b/src/pwd/__pwd.c
new file mode 100644
index 00000000..c6fb7787
--- /dev/null
+++ b/src/pwd/__pwd.c
@@ -0,0 +1,18 @@
+#include "_pwd.h"
+
+#ifndef _XOPEN_SOURCE
+#undef getpwent
+#define getpwent __getpwent
+#include "getpwent.c"
+#endif
+
+struct __pwd __pwd =
+{
+ NULL,
+ { 0 },
+ getpwent,
+};
+
+/*
+POSIX(1)
+*/
diff --git a/src/pwd/_pwd.h b/src/pwd/_pwd.h
new file mode 100644
index 00000000..b5d666bf
--- /dev/null
+++ b/src/pwd/_pwd.h
@@ -0,0 +1,29 @@
+#ifndef ___PWD_H__
+#define ___PWD_H__
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <stdio.h>
+
+struct __pwd {
+ FILE *db;
+ struct passwd pwd;
+ struct passwd * (*getpwent)(void);
+};
+
+extern struct __pwd __pwd;
+
+#ifndef _XOPEN_SOURCE
+#define setpwent() (__pwd.db == NULL ? (void)0 : (void)rewind(__pwd.db))
+
+#define endpwent() do { \
+ if (__pwd.db) { \
+ fclose(__pwd.db); \
+ __pwd.db = NULL; \
+ } \
+} while (0)
+
+#define getpwent __pwd.getpwent
+#endif
+
+#endif