blob: 4c99aa4d4b57d3d6a1e7cda03201c3cb97731507 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#define _BSD_SOURCE
#include <unistd.h>
#include <paths.h>
#include <string.h>
#include "parselib.h"
static struct state __ps;
void setusershell(void) {
__prepare_parse(_PATH_SHELLS,&__ps);
}
void endusershell(void) {
__end_parse(&__ps);
}
#define MAXSHELL 128
char *getusershell(void) {
static char line[MAXSHELL+1];
size_t i;
if (!__ps.buffirst) setusershell();
if (!__ps.buffirst) goto error;
if (__ps.cur>=__ps.buflen) goto error;
i=__parse_1(&__ps,'\n');
if (i>=MAXSHELL) i=MAXSHELL-1;
memcpy(line,__ps.buffirst+__ps.cur,i);
line[i]=0;
__ps.cur+=i+1;
return line;
error:
return 0;
}
|