change strncasecmp() == 0 to STRCASEEQLEN()
[libguestfs.git] / fish / destpaths.c
index f4f1318..c12c64a 100644 (file)
@@ -18,8 +18,6 @@
 
 #include <config.h>
 
-#define _GNU_SOURCE            // for strndup, asprintf
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
@@ -61,7 +59,7 @@ struct word {
 };
 
 static void
-free_words (struct word *words, int nr_words)
+free_words (struct word *words, size_t nr_words)
 {
   size_t i;
 
@@ -113,7 +111,7 @@ complete_dest_paths_generator (const char *text, int state)
       size_t i;                                                                \
       size_t n = count_strings (strs);                                 \
                                                                         \
-      if ( ! xalloc_oversized (nr_words + n, sizeof (struct word))) {  \
+      if ( n > 0 && ! xalloc_oversized (nr_words + n, sizeof (struct word))) { \
         struct word *w;                                                        \
         w = realloc (words, sizeof (struct word) * (nr_words + n));    \
                                                                         \
@@ -129,13 +127,13 @@ complete_dest_paths_generator (const char *text, int state)
             nr_words++;                                                        \
           }                                                            \
         }                                                              \
-        free (strs);                                                   \
       }                                                                        \
+      free (strs);                                                     \
     }                                                                  \
   } while (0)
 
     /* Is it a device? */
-    if (len < 5 || strncmp (text, "/dev/", 5) == 0) {
+    if (len < 5 || STREQLEN (text, "/dev/", 5)) {
       /* Get a list of everything that can possibly begin with /dev/ */
       strs = guestfs_list_devices (g);
       APPEND_STRS_AND_FREE;
@@ -168,9 +166,9 @@ complete_dest_paths_generator (const char *text, int state)
           for (i = 0; i < dirents->len; ++i) {
             int err;
 
-            if (strcmp (dirents->val[i].name, ".") != 0 &&
-                strcmp (dirents->val[i].name, "..") != 0) {
-              if (strcmp (dir, "/") == 0)
+            if (STRNEQ (dirents->val[i].name, ".") &&
+                STRNEQ (dirents->val[i].name, "..")) {
+              if (STREQ (dir, "/"))
                 err = asprintf (&p, "/%s", dirents->val[i].name);
               else
                 err = asprintf (&p, "%s/%s", dir, dirents->val[i].name);
@@ -217,7 +215,7 @@ complete_dest_paths_generator (const char *text, int state)
     word = &words[index];
     index++;
 
-    if (strncasecmp (word->name, text, len) == 0) {
+    if (STRCASEEQLEN (word->name, text, len)) {
       if (word->is_dir)
         rl_completion_append_character = '/';