blob: 62d25a83f4caa01b951285642c31d83579ab95de [file] [log] [blame]
/* vi: set sw=4 ts=4: */
/*
* Android/bionic glue.
*
* Copyright (C) 2010 by Dylan Simon <dylan@dylex.net>
*
* Licensed under GPLv2, see file LICENSE in this tarball for details.
*/
#include <stdlib.h>
#include "libbb.h"
#ifndef BIONIC_ICS
int clearenv(void)
{
char **P = environ;
/* should never be NULL */
if (!environ)
environ = (char **)xzalloc(sizeof(char *));
if (P != NULL) {
for (; *P; ++P)
*P = NULL;
}
return 0;
}
#endif
/* no /etc/shells anyway */
char *getusershell() { return NULL; }
void setusershell() {}
void endusershell() {}
struct mntent *getmntent_r(FILE *fp, struct mntent *mnt, char *buf, int buflen)
{
char *tokp = NULL, *s;
do {
if (!fgets(buf, buflen, fp))
return NULL;
tokp = 0;
s = strtok_r(buf, " \t\n", &tokp);
} while (!s || *s == '#');
mnt->mnt_fsname = s;
mnt->mnt_freq = mnt->mnt_passno = 0;
if (!(mnt->mnt_dir = strtok_r(NULL, " \t\n", &tokp)))
return NULL;
if (!(mnt->mnt_type = strtok_r(NULL, " \t\n", &tokp)))
return NULL;
if (!(mnt->mnt_opts = strtok_r(NULL, " \t\n", &tokp)))
mnt->mnt_opts = "";
else if ((s = strtok_r(NULL, " \t\n", &tokp)))
{
mnt->mnt_freq = atoi(s);
if ((s = strtok_r(NULL, " \t\n", &tokp)))
mnt->mnt_passno = atoi(s);
}
return mnt;
}
/* override definition in bionic/stubs.c */
struct mntent *getmntent(FILE *fp)
{
static struct mntent mnt;
static char buf[256];
return getmntent_r(fp, &mnt, buf, 256);
}
/* not used anyway */
int addmntent(FILE *fp UNUSED_PARAM, const struct mntent *mnt UNUSED_PARAM)
{
errno = ENOENT;
return 1;
}
char *hasmntopt(const struct mntent *mnt, const char *opt)
{
char *o = mnt->mnt_opts;
size_t l = strlen(opt);
while ((o = strstr(o, opt)) &&
((o > mnt->mnt_opts && o[-1] != ',') ||
(o[l] != 0 && o[l] != ',' && o[l] != '=')));
return o;
}
/* declared in grp.h, but not necessary */
#if !ENABLE_USE_BB_PWD_GRP
int setpwent() { return 0; }
void setgrent() {}
void endgrent() {}
#endif