]> granicus.if.org Git - graphviz/commitdiff
pathgetlink: return a size_t and SIZE_MAX for an error value
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Wed, 4 Aug 2021 03:23:45 +0000 (20:23 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 8 Aug 2021 17:41:31 +0000 (10:41 -0700)
This will permit some upcoming changes to remove some compiler warnings.

lib/ast/ast.h
lib/ast/pathcanon.c
lib/ast/pathgetlink.c

index ddaec927070d105a7714e0c653ea375456a913fc..47bba30a0802d66c9ffd0a25c4cb934464e36c85 100644 (file)
@@ -70,7 +70,7 @@ extern "C" {
                            const char *, int);
     extern char *pathcat(char *, const char *, int, const char *,
                         const char *);
-    extern int pathgetlink(const char *, char *, size_t);
+    extern size_t pathgetlink(const char *, char *, size_t);
     extern int pathexists(char *, int);
 
     extern int chresc(const char *, char **);
index 9231adf802d93d2143ebd627c10ddda3627163c3..096a8b16c67805a51313811c05a1f3b88b3ebdfa 100644 (file)
@@ -34,6 +34,7 @@
 #include <ast/error.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <stdint.h>
 #include <string.h>
 
 char *pathcanon(char *path, int flags)
@@ -134,9 +135,9 @@ char *pathcanon(char *path, int flags)
 
                    c = *(t - 1);
                    *(t - 1) = 0;
-                   int len = pathgetlink(phys, buf, sizeof(buf));
+                   size_t len = pathgetlink(phys, buf, sizeof(buf));
                    *(t - 1) = c;
-                   if (len > 0) {
+                   if (len != SIZE_MAX && len > 0) {
                        if ((t + len + 1) >= e) { /* make sure path fits in buf */
                            strcpy(path, s);
                             return 0;
@@ -147,7 +148,7 @@ char *pathcanon(char *path, int flags)
                            p = r = path;
                        v = s = t = p;
                        strcpy(p, buf);
-                   } else if (len < 0 && errno == ENOENT) {
+                   } else if (len == SIZE_MAX && errno == ENOENT) {
                        if (flags & PATH_EXISTS) {
                            strcpy(path, s);
                            return 0;
index 38af3e9a9caeccb3d234d50faec826c48f75d9d0..41f2619804a379f81aa0cac554e829c5929dc6ab 100644 (file)
 #include <ast/compat_unistd.h>
 #endif
 #include <stddef.h>
+#include <stdint.h>
 
 /*
  * return external representation for symbolic link text of name in buf
  * the link text string length is returned
  */
 
-int pathgetlink(const char *name, char *buf, size_t siz)
+size_t pathgetlink(const char *name, char *buf, size_t siz)
 {
 #ifdef _WIN32
-       return (-1);
+       return SIZE_MAX;
 #else
     int n;
 
     if ((n = readlink(name, buf, siz)) < 0)
-       return (-1);
+       return SIZE_MAX;
     if (n >= siz) {
        errno = EINVAL;
-       return (-1);
+       return SIZE_MAX;
     }
     buf[n] = 0;
     return (n);