| Index: fusl/src/legacy/getusershell.c
|
| diff --git a/fusl/src/legacy/getusershell.c b/fusl/src/legacy/getusershell.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5fecdec2e44196f19a53dc4fd15018abc47bbb8c
|
| --- /dev/null
|
| +++ b/fusl/src/legacy/getusershell.c
|
| @@ -0,0 +1,32 @@
|
| +#define _GNU_SOURCE
|
| +#include <stdio.h>
|
| +#include <unistd.h>
|
| +
|
| +static const char defshells[] = "/bin/sh\n/bin/csh\n";
|
| +
|
| +static char *line;
|
| +static size_t linesize;
|
| +static FILE *f;
|
| +
|
| +void endusershell(void)
|
| +{
|
| + if (f) fclose(f);
|
| + f = 0;
|
| +}
|
| +
|
| +void setusershell(void)
|
| +{
|
| + if (!f) f = fopen("/etc/shells", "rbe");
|
| + if (!f) f = fmemopen((void *)defshells, sizeof defshells - 1, "rb");
|
| +}
|
| +
|
| +char *getusershell(void)
|
| +{
|
| + ssize_t l;
|
| + if (!f) setusershell();
|
| + if (!f) return 0;
|
| + l = getline(&line, &linesize, f);
|
| + if (l <= 0) return 0;
|
| + if (line[l-1]=='\n') line[l-1]=0;
|
| + return line;
|
| +}
|
|
|