diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/pwd_grp/Makefile | 2 | ||||
| -rw-r--r-- | libc/pwd_grp/putgrent.c | 56 | 
2 files changed, 57 insertions, 1 deletions
| diff --git a/libc/pwd_grp/Makefile b/libc/pwd_grp/Makefile index 06ba857f0..f2cdf5a17 100644 --- a/libc/pwd_grp/Makefile +++ b/libc/pwd_grp/Makefile @@ -26,7 +26,7 @@ include $(TOPDIR)Rules.mak  CSRC= pwent.c getpwnam.c getpwuid.c putpwent.c getpw.c fgetpwent.c \  	__getgrent_r.c grent.c getgrnam.c getgrgid.c fgetgrent.c \ -	initgroups.c __getpwent_r.c +	initgroups.c __getpwent_r.c putgrent.c  ifeq ($(HAS_SHADOW),y)  CSRC+= lckpwdf.c spent.c getspnam.c getspuid.c putspent.c sgetspent.c \ diff --git a/libc/pwd_grp/putgrent.c b/libc/pwd_grp/putgrent.c new file mode 100644 index 000000000..d4838dbee --- /dev/null +++ b/libc/pwd_grp/putgrent.c @@ -0,0 +1,56 @@ +/* vi: set sw=4 ts=4: */ +/* + * putgrent.c + * Copyright (C) 2003 Erik Andersen <andersee@debian.org> + *  + *  This library is free software; you can redistribute it and/or + *  modify it under the terms of the GNU Library General Public + *  License as published by the Free Software Foundation; either + *  version 2 of the License, or (at your option) any later version. + * + *  This library is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + *  Library General Public License for more details. + * + *  You should have received a copy of the GNU Library General Public + *  License along with this library; if not, write to the Free + *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include <stdio.h> +#include <errno.h> +#include "config.h" + + +/* Write the given entry onto the given stream.  */ +int putgrent(const struct group *__restrict grp, +		     FILE *__restrict f) +{ +	if (grp == NULL || f == NULL) { +		__set_errno(EINVAL); +		return -1; +	} +	if (fprintf(f, "%s:%s:%u:", grp->gr_name,  +				grp->gr_passwd, grp->gr_gid) < 0)  +	{ +		return -1; +	} +	if (grp->gr_mem) { +		int i; +		char **gr_mem = grp->gr_mem; +		while(*gr_mem) { +			if (fprintf(f, (i++)? ",%s" : "%s", *gr_mem) < 0) { +				return -1; +			} +			gr_mem++; +		} +	} + +	if (fputc('\n', f) < 0) { +		return -1; +	} +	return 0; +} + | 
