aboutsummaryrefslogtreecommitdiffstats
path: root/atari/textrd.c
blob: 07ed09058caed2ae76532943353f6560486f9daf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
 * From gnulib Atari ST sources - with a fix for a bug causing
 * a premature EOF when only characters read are CR's.
 * Written by Eric R. Smith and placed in the public domain.
 * Fix - Michal Jaegermann, June 1991.
 */
#include <stdio.h>
#include <unistd.h>
int
_text_read(fd, buf, nbytes)
	int fd;
	char *buf;
	int nbytes;
{
	char *to, *from;
	int  r;
	do {
		r = read(fd, buf, nbytes);
		if (r <= 0)		/* if EOF or read error - return */
			return r;
		to = from = buf;
		do {
			if (*from == '\r')
				from++;
			else
				*to++ = *from++;
		} while (--r);
	} while (buf == to);	/* only '\r's? - try to read next nbytes */
	return (to - buf);
}