Clear dform and dsec when exiting a first-level directory in treescan().
authorschwarze <schwarze@openbsd.org>
Mon, 12 Oct 2015 00:32:37 +0000 (00:32 +0000)
committerschwarze <schwarze@openbsd.org>
Mon, 12 Oct 2015 00:32:37 +0000 (00:32 +0000)
Fixes a segfault reported by bentley@.
While here, do some style cleanup in the same function.

usr.bin/mandoc/mandocdb.c

index 7f8c67b..809ad99 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mandocdb.c,v 1.152 2015/10/12 00:07:27 schwarze Exp $ */
+/*     $OpenBSD: mandocdb.c,v 1.153 2015/10/12 00:32:37 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -574,7 +574,7 @@ treescan(void)
 
        f = fts_open((char * const *)argv,
            FTS_PHYSICAL | FTS_NOCHDIR, NULL);
-       if (NULL == f) {
+       if (f == NULL) {
                exitcode = (int)MANDOCLEVEL_SYSERR;
                say("", "&fts_open");
                return 0;
@@ -583,7 +583,7 @@ treescan(void)
        dsec = arch = NULL;
        dform = FORM_NONE;
 
-       while (NULL != (ff = fts_read(f))) {
+       while ((ff = fts_read(f)) != NULL) {
                path = ff->fts_path + 2;
                switch (ff->fts_info) {
 
@@ -592,7 +592,7 @@ treescan(void)
                 * then get handled just like regular files.
                 */
                case FTS_SL:
-                       if (NULL == realpath(path, buf)) {
+                       if (realpath(path, buf) == NULL) {
                                if (warnings)
                                        say(path, "&realpath");
                                continue;
@@ -603,7 +603,7 @@ treescan(void)
                                continue;
                        }
                        /* Use logical inode to avoid mpages dupe. */
-                       if (-1 == stat(path, ff->fts_statp)) {
+                       if (stat(path, ff->fts_statp) == -1) {
                                if (warnings)
                                        say(path, "&stat");
                                continue;
@@ -615,7 +615,7 @@ treescan(void)
                 * stored directory data and handling the filename.
                 */
                case FTS_F:
-                       if (0 == strcmp(path, MANDOC_DB))
+                       if ( ! strcmp(path, MANDOC_DB))
                                continue;
                        if ( ! use_all && ff->fts_level < 2) {
                                if (warnings)
@@ -624,37 +624,37 @@ treescan(void)
                        }
                        gzip = 0;
                        fsec = NULL;
-                       while (NULL == fsec) {
+                       while (fsec == NULL) {
                                fsec = strrchr(ff->fts_name, '.');
-                               if (NULL == fsec || strcmp(fsec+1, "gz"))
+                               if (fsec == NULL || strcmp(fsec+1, "gz"))
                                        break;
                                gzip = 1;
                                *fsec = '\0';
                                fsec = NULL;
                        }
-                       if (NULL == fsec) {
+                       if (fsec == NULL) {
                                if ( ! use_all) {
                                        if (warnings)
                                                say(path,
                                                    "No filename suffix");
                                        continue;
                                }
-                       } else if (0 == strcmp(++fsec, "html")) {
+                       } else if ( ! strcmp(++fsec, "html")) {
                                if (warnings)
                                        say(path, "Skip html");
                                continue;
-                       } else if (0 == strcmp(fsec, "ps")) {
+                       } else if ( ! strcmp(fsec, "ps")) {
                                if (warnings)
                                        say(path, "Skip ps");
                                continue;
-                       } else if (0 == strcmp(fsec, "pdf")) {
+                       } else if ( ! strcmp(fsec, "pdf")) {
                                if (warnings)
                                        say(path, "Skip pdf");
                                continue;
                        } else if ( ! use_all &&
-                           ((FORM_SRC == dform &&
+                           ((dform == FORM_SRC &&
                              strncmp(fsec, dsec, strlen(dsec))) ||
-                            (FORM_CAT == dform && strcmp(fsec, "0")))) {
+                            (dform == FORM_CAT && strcmp(fsec, "0")))) {
                                if (warnings)
                                        say(path, "Wrong filename suffix");
                                continue;
@@ -699,13 +699,16 @@ treescan(void)
                         * If we're not in use_all, enforce it.
                         */
                        cp = ff->fts_name;
-                       if (FTS_DP == ff->fts_info)
+                       if (ff->fts_info == FTS_DP) {
+                               dform = FORM_NONE;
+                               dsec = NULL;
                                break;
+                       }
 
-                       if (0 == strncmp(cp, "man", 3)) {
+                       if ( ! strncmp(cp, "man", 3)) {
                                dform = FORM_SRC;
                                dsec = cp + 3;
-                       } else if (0 == strncmp(cp, "cat", 3)) {
+                       } else if ( ! strncmp(cp, "cat", 3)) {
                                dform = FORM_CAT;
                                dsec = cp + 3;
                        } else {
@@ -713,7 +716,7 @@ treescan(void)
                                dsec = NULL;
                        }
 
-                       if (NULL != dsec || use_all)
+                       if (dsec != NULL || use_all)
                                break;
 
                        if (warnings)
@@ -725,13 +728,13 @@ treescan(void)
                         * Possibly our architecture.
                         * If we're descending, keep tabs on it.
                         */
-                       if (FTS_DP != ff->fts_info && NULL != dsec)
+                       if (ff->fts_info != FTS_DP && dsec != NULL)
                                arch = ff->fts_name;
                        else
                                arch = NULL;
                        break;
                default:
-                       if (FTS_DP == ff->fts_info || use_all)
+                       if (ff->fts_info == FTS_DP || use_all)
                                break;
                        if (warnings)
                                say(path, "Extraneous directory part");