#include	"inet.h"
#include	<errno.h>
#include	<string.h>

int
readn (fd, ptr, nbytes)
int	fd;
char	*ptr;
int	nbytes;
{
	int nleft, nread;

	nleft = nbytes;
	while (nleft > 0) {
		nread = read (fd, ptr, nleft);
		if (nread < 0)
			return (nread);		/* error, return < 0 */

		else if (nread == 0)
			break;			/* EOF */

		nleft -= nread;
		ptr += nread;
	}
	return (nbytes - nleft);
}

int
writen(fd, ptr, nbytes)
int	fd;
char	*ptr;
int	nbytes;
{
	int nleft, nwritten;

	nleft = nbytes;
	while (nleft > 0) {
		nwritten = write (fd, ptr, nleft);
		if (nwritten <= 0)
			return (nwritten);		/* error */

		nleft -= nwritten;
		ptr += nwritten;
	}
	return (nbytes - nleft);
}

/*
**	Read a line from a descriptor.  Read the line one byte at a time,
**	looking for the newline.  We store the newline in the buffer,
**	then follow it with a null (the same as fgets(3)).
**	We return the number of characters up to, but not including
**	the null (the same as strlen(3)).
*/

int
readline(fd, ptr, maxlen)
int	fd;
char	*ptr;
int	maxlen;
{
	int	n, rc;
	char	c;

	for (n = 1; n < maxlen; n++) {
		if ( (rc = read (fd, &c, 1)) == 1) {
			*ptr++ = c;
			if (c == '\n')
				break;
		} else if (rc == 0) {
			if (n == 1)
				return(0);	/* EOF, no data read */
			else
				break;		/* EOF, some data read */
		} else
			return (-1);		/* error */
	}

	*ptr = 0;
	return (n);
}

err_dump(string)
char	*string;
{
	fprintf (	stderr, 
			"%s, error '%s'\n", 
			string, strerror(errno));
	exit (-1);
}
