mirror of https://git.musl-libc.org/git/musl
Browse Source
I actually wrote these a month ago but forgot to integrate them. ugly, probably-harmful-to-use functions, but some legacy apps want them...rs-1.0
2 changed files with 36 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||||
|
#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; |
||||
|
size_t linesize; |
||||
|
static FILE *f; |
||||
|
|
||||
|
void endusershell(void) |
||||
|
{ |
||||
|
if (f) fclose(f); |
||||
|
f = 0; |
||||
|
} |
||||
|
|
||||
|
void setusershell(void) |
||||
|
{ |
||||
|
if (!f) f = fopen("/etc/shells", "rb"); |
||||
|
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; |
||||
|
} |
||||
Loading…
Reference in new issue