47 lines
1.3 KiB
Plaintext
47 lines
1.3 KiB
Plaintext
$OpenBSD: patch-src_tools_c,v 1.3 2004/01/12 05:37:11 jolan Exp $
|
|
--- src/tools.c.orig 2003-10-26 16:28:57.000000000 -0600
|
|
+++ src/tools.c 2004-01-11 22:32:57.000000000 -0600
|
|
@@ -559,6 +559,33 @@ guint i;
|
|
}
|
|
|
|
|
|
+/* read a single char from a file descriptor. If the descriptor
|
|
+ says that it is not available, then try again up to 5 times,
|
|
+ before giving up.
|
|
+ Required for Mac OS 10.3
|
|
+*/
|
|
+
|
|
+static gint read_char(gint fd, gchar *c) {
|
|
+gint rc;
|
|
+gint retries;
|
|
+
|
|
+ retries = 5;
|
|
+
|
|
+ while (retries) {
|
|
+ rc = read(fd, c, 1);
|
|
+
|
|
+ /* all ok, read one char or EOF */
|
|
+ if (rc != -1) {
|
|
+ return rc;
|
|
+ }
|
|
+
|
|
+ /* error code, try again after a little while */
|
|
+ usleep(100);
|
|
+ retries--;
|
|
+ }
|
|
+ return rc;
|
|
+}
|
|
+
|
|
/*
|
|
* Read a line from a descriptor. Read the line one byte at a time,
|
|
* looking for the newline. Works fine in nonblocking mode..here
|
|
@@ -576,7 +603,7 @@ gchar *str;
|
|
str = ptr;
|
|
|
|
for (n = 1; n < maxlen; n++) {
|
|
- if ( (rc = read(fd, &c, 1)) == 1) {
|
|
+ if ( (rc = read_char(fd, &c)) == 1) {
|
|
*ptr++ = c;
|
|
if (c == '\n') {
|
|
break;
|