command.c: simplify handle_connect()
[paraslash.git] / fd.c
diff --git a/fd.c b/fd.c
index dd07466cef2623e5aaa053178d7eda9e992e3dcd..d53a3b4521fdbec1e16aa3263ba07f699feac40c 100644 (file)
--- a/fd.c
+++ b/fd.c
@@ -140,3 +140,29 @@ __must_check int para_fread(void *dest, size_t nbytes, size_t nmemb, FILE *strea
                return 0;
        return -E_FREAD;
 }
+/**
+* paraslash's wrapper for fgets(3)  
+* \param line pointer to the buffer to store the line
+* \param size the size of the buffer given by \a line
+* \param f the stream to read from
+*
+* \return Unlike the standard fgets() function, an integer value
+* is returned. On success, this function returns 1. On errors, -E_FGETS
+* is returned. A zero return value indicates an end of file condition.
+*/
+__must_check int para_fgets(char *line, int size, FILE *f)
+{
+again:
+       if (fgets(line, size, f))
+               return 1;
+       if (feof(f))
+               return 0;
+       if (!ferror(f))
+               return -E_FGETS;
+       if (errno != EINTR) {
+               PARA_ERROR_LOG("%s\n", strerror(errno));
+               return -E_FGETS;
+       }
+       clearerr(f);
+       goto again;
+}