Handle the failure to read from /proc/self/cmdline by printing an error
message and fix the -Wsign-compare warning:

In file included from ./util/u_memory.h:39:0,
                 from os/os_process.c:31:
os/os_process.c: In function 'os_get_command_line':
os/os_process.c:140:16: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
       assert(n < size);
                ^
./util/u_debug.h:189:30: note: in definition of macro 'debug_assert'
 #define debug_assert(expr) ((expr) ? (void)0 : _debug_assert_fail(#expr,
__FILE__, __LINE__, __FUNCTION__))
                              ^~~~
os/os_process.c:140:7: note: in expansion of macro 'assert'
       assert(n < size);
       ^~~~~~

gallium/aux/os/ squash

Signed-off-by: Gert Wollny <gert.wol...@collabora.com>
---
 src/gallium/auxiliary/os/os_process.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/gallium/auxiliary/os/os_process.c 
b/src/gallium/auxiliary/os/os_process.c
index 035bd228e7..a95465a7bb 100644
--- a/src/gallium/auxiliary/os/os_process.c
+++ b/src/gallium/auxiliary/os/os_process.c
@@ -34,6 +34,7 @@
 #  include <windows.h>
 #elif defined(__GLIBC__) || defined(__CYGWIN__)
 #  include <errno.h>
+#  include <stdio.h>
 #elif defined(PIPE_OS_BSD) || defined(PIPE_OS_APPLE) || 
defined(PIPE_OS_ANDROID)
 #  include <stdlib.h>
 #elif defined(PIPE_OS_HAIKU)
@@ -135,19 +136,26 @@ os_get_command_line(char *cmdline, size_t size)
 #elif defined(PIPE_OS_LINUX)
    int f = open("/proc/self/cmdline", O_RDONLY);
    if (f) {
-      const int n = read(f, cmdline, size - 1);
-      int i;
-      assert(n < size);
-      // The arguments are separated by '\0' chars.  Convert them to spaces.
-      for (i = 0; i < n; i++) {
-         if (cmdline[i] == 0) {
-            cmdline[i] = ' ';
+      bool retval;
+      const ssize_t n = read(f, cmdline, size - 1);
+      if (n >= 0) {
+        int i;
+        assert(n < (ssize_t)size);
+        // The arguments are separated by '\0' chars.  Convert them to spaces.
+        for (i = 0; i < n; i++) {
+           if (cmdline[i] == 0) {
+              cmdline[i] = ' ';
+           }
          }
+        // terminate the string
+        cmdline[n] = 0;
+        retval = TRUE;
+      } else {
+        perror("os_get_command_line: Error reading from /proc/self/cmdline:");
+        retval = FALSE;
       }
-      // terminate the string
-      cmdline[n] = 0;
       close(f);
-      return TRUE;
+      return retval;
    }
 #endif
 
-- 
2.16.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to