Add lttng_waiter utils
[lttng-tools.git] / src / common / readwrite.c
index 7b8460962eda5ee7e917be20cce7c47be0a56ea4..0e8684e260b59ea242bd708cf4f8a0105f814702 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _LGPL_SOURCE
 #include <assert.h>
 #include <errno.h>
+#include <limits.h>
 #include <unistd.h>
 
 #include "readwrite.h"
  * Upon success, they return the "count" received as parameter.
  * They can return a negative value if an error occurs.
  * If a value lower than the requested "count" is returned, it means an
- * error occured.
+ * error occurred.
  * The error can be checked by querying errno.
  */
+LTTNG_HIDDEN
 ssize_t lttng_read(int fd, void *buf, size_t count)
 {
        size_t i = 0;
@@ -36,6 +39,14 @@ ssize_t lttng_read(int fd, void *buf, size_t count)
 
        assert(buf);
 
+       /*
+        * Deny a read count that can be bigger then the returned value max size.
+        * This makes the function to never return an overflow value.
+        */
+       if (count > SSIZE_MAX) {
+               return -EINVAL;
+       }
+
        do {
                ret = read(fd, buf + i, count - i);
                if (ret < 0) {
@@ -58,6 +69,7 @@ error:
        }
 }
 
+LTTNG_HIDDEN
 ssize_t lttng_write(int fd, const void *buf, size_t count)
 {
        size_t i = 0;
@@ -65,6 +77,14 @@ ssize_t lttng_write(int fd, const void *buf, size_t count)
 
        assert(buf);
 
+       /*
+        * Deny a write count that can be bigger then the returned value max size.
+        * This makes the function to never return an overflow value.
+        */
+       if (count > SSIZE_MAX) {
+               return -EINVAL;
+       }
+
        do {
                ret = write(fd, buf + i, count - i);
                if (ret < 0) {
This page took 0.023864 seconds and 4 git commands to generate.