/* writen.c - from Stevens, modified so as not to depend on other files*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

extern int errno;

ssize_t				/* Write "n" bytes to a descriptor. */
writen(int fd, const void *vptr, size_t n)
{
  size_t	nleft = n;
  ssize_t	nwritten;
  const char	*ptr = vptr;
  
  while (nleft > 0) {
    if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
      if (errno == EINTR)
	nwritten = 0;		/* and call write() again */
      else
	return(-1);		/* error */
    }
    
    nleft -= nwritten;
    ptr   += nwritten;
  }
  return(n);
}
/* end writen */


void
Writen(int fd, void *ptr, size_t nbytes)
{
  if (writen(fd, ptr, nbytes) != nbytes) {
    fprintf(stderr, "writen error`: %s\n", strerror(errno));
    exit(0);
  }
}
