blob: 3e3b538f69e2ca872aebe171eae2b1c0349e4f55 [file] [log] [blame]
#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;
}