summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libcruft/getusershell.c
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;
}