AUSAM/source/libc/addentry.c
#
#include <local-system>
#include <passwd.h>
addentry(fd,pe,te)
register long *te;
register struct pwent *pe;
{
/*
* Updates the long that "te" points to with the seek address
* for the new entry. The new entry is written from "pe".
* Returns the sum of variable length string fields written or
* -1 for error
*/
extern long getoffset();
register i;
char *strings[PWSLENCNT];
int total;
for(i=0; i<PWSLENCNT; i++)
{
strings[i] = pe->pw_strings[i];
pe->pw_strings[i] = strlen(strings[i])+1; /* EH PETE */
}
/* pointers saved and changed to counts in "pe" */
*te = getoffset(fd);
lseek(fd,*te,0);
/* ready to write */
if( write(fd,pe,PWENTLEN) != PWENTLEN ) return (-1);
total=0;
for(i=0; i < PWSLENCNT; i++)
if(write(fd,strings[i],pe->pw_strings[i]) != pe->pw_strings[i])
return(-1);
else
total =+ pe->pw_strings[i];
/* all written, restore pointers to be nice */
for(i=0; i<PWSLENCNT; i++)
pe->pw_strings[i] = strings[i];
/* now return count */
return (total);
}