コード例 #1
0
ファイル: getpwent_r.c プロジェクト: andreiw/polaris
PASS_R_RETURN
fgetpwent_r(FILE *f, struct passwd *pwptr, PASS_R_COPY_ARGS) {
	struct passwd *pw = fgetpwent(f);
	int res;

	if (pw == NULL)
		return (PASS_R_BAD);

	res = copy_passwd(pw, pwptr, PASS_R_COPY);
	return (res ? PASS_R_BAD : PASS_R_OK);
}
コード例 #2
0
ファイル: getpwent.c プロジェクト: CoryXie/BarrelfishOS
/**
 * \brief Return struct passwd of current user of the user database.
 *
 * When called the first time returns the struct passwd of the first user listed
 * in the user database. Each successive call returns the next user in the
 * user database.
 */
struct passwd *getpwent(void)
{
    struct passwd *ret = NULL;

    if (db_cursor < ARRAY_LENGTH(userdb)) {
        copy_passwd(&user, &userdb[db_cursor++]);
        ret = &user;
        POSIXCOMPAT_DEBUG("getpwent(): returning user \"%s\"\n",
                          ret->pw_name);
    } else {
        ret = NULL;
        POSIXCOMPAT_DEBUG("getpwent(): no more users\n");
    }

    return ret;
}
コード例 #3
0
ファイル: getpwent_r.c プロジェクト: andreiw/polaris
int
__posix_getpwnam_r(const char *login,  struct passwd *pwptr,
		char *buf, size_t buflen, struct passwd **result) {
#else
int
getpwnam_r(const char *login,  struct passwd *pwptr,
		char *buf, size_t buflen, struct passwd **result) {
#endif
	struct passwd *pw = getpwnam(login);
	int res;

	if (pw == NULL) {
		*result = NULL;
		return (0);
	}

	res = copy_passwd(pw, pwptr, buf, buflen);
	*result = res ? NULL : pwptr;
	return (res);
}

#ifdef POSIX_GETPWNAM_R
struct passwd *
getpwnam_r(const char *login,  struct passwd *pwptr, char *buf, int buflen) {
	struct passwd *pw = getpwnam(login);
	int res;

	if (pw == NULL)
		return (NULL);

	res = copy_passwd(pw, pwptr, buf, buflen);
	return (res ? NULL : pwptr);
}
#endif

/* POSIX 1003.1c */
#ifdef POSIX_GETPWUID_R
int
__posix_getpwuid_r(uid_t uid, struct passwd *pwptr,
		char *buf, size_t buflen, struct passwd **result) {
#else
int
getpwuid_r(uid_t uid, struct passwd *pwptr,
		char *buf, size_t buflen, struct passwd **result) {
#endif
	struct passwd *pw = getpwuid(uid);
	int res;

	if (pw == NULL) {
		*result = NULL;
		return (0);
	}

	res = copy_passwd(pw, pwptr, buf, buflen);
	*result = res ? NULL : pwptr;
	return (res);
}

#ifdef POSIX_GETPWUID_R
struct passwd *
getpwuid_r(uid_t uid,  struct passwd *pwptr, char *buf, int buflen) {
	struct passwd *pw = getpwuid(uid);
	int res;

	if (pw == NULL)
		return (NULL);

	res = copy_passwd(pw, pwptr, buf, buflen);
	return (res ? NULL : pwptr);
}
#endif

/*
 *	These assume a single context is in operation per thread.
 *	If this is not the case we will need to call irs directly
 *	rather than through the base functions.
 */

PASS_R_RETURN
getpwent_r(struct passwd *pwptr, PASS_R_ARGS) {
	struct passwd *pw = getpwent();
	int res;

	if (pw == NULL)
		return (PASS_R_BAD);

	res = copy_passwd(pw, pwptr, buf, buflen);
	return (res ? PASS_R_BAD : PASS_R_OK);
}

PASS_R_SET_RETURN
#ifdef PASS_R_ENT_ARGS
setpassent_r(int stayopen, PASS_R_ENT_ARGS)
#else
setpassent_r(int stayopen)
#endif
{

	setpassent(stayopen);
#ifdef PASS_R_SET_RESULT
	return (PASS_R_SET_RESULT);
#endif
}