]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - fd.c
dccp.c was modified in 2007, so change header to reflect this
[paraslash.git] / fd.c
diff --git a/fd.c b/fd.c
index dd07466cef2623e5aaa053178d7eda9e992e3dcd..637884b4b895a9279c5c928ea4028dbddb1a74c7 100644 (file)
--- a/fd.c
+++ b/fd.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2007 Andre Noll <maan@systemlinux.org>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
@@ -140,3 +140,46 @@ __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;
+}
+
+/**
+ * paralash's wrapper for fseek(3)
+ *
+ * \param stream stream to seek
+ * \param offset added to the position specified by whence
+ * \param whence \p SEEK_SET, \p SEEK_CUR, or \p SEEK_END
+ *
+ * \return positive on success, -E_FSEEK on errors.
+ *
+ * \sa fseek(3)
+ */
+int para_fseek(FILE *stream, long offset, int whence)
+{
+       int ret = fseek(stream, offset, whence);
+       return ret < 0? -E_FSEEK : 1;
+}