123456789101112131415161718192021222324252627282930313233 |
- #define _GNU_SOURCE
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.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;
- }
|