[BACK]Return to mansearch.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mansearch.c between version 1.53 and 1.56

version 1.53, 2015/01/20 18:21:18 version 1.56, 2015/03/27 17:37:25
Line 7 
Line 7 
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
  * copyright notice and this permission notice appear in all copies.   * copyright notice and this permission notice appear in all copies.
  *   *
  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
Line 24 
Line 24 
 #include <errno.h>  #include <errno.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <getopt.h>  #include <getopt.h>
   #include <glob.h>
 #include <limits.h>  #include <limits.h>
 #include <regex.h>  #include <regex.h>
 #include <stdio.h>  #include <stdio.h>
Line 45 
Line 46 
   
 #include "mandoc.h"  #include "mandoc.h"
 #include "mandoc_aux.h"  #include "mandoc_aux.h"
 #include "manpath.h"  #include "manconf.h"
 #include "mansearch.h"  #include "mansearch.h"
   
 extern int mansearch_keymax;  extern int mansearch_keymax;
Line 194  mansearch(const struct mansearch *search,
Line 195  mansearch(const struct mansearch *search,
         if (NULL == (e = exprcomp(search, argc, argv)))          if (NULL == (e = exprcomp(search, argc, argv)))
                 goto out;                  goto out;
   
         outbit = 0;  
         if (NULL != search->outkey) {          if (NULL != search->outkey) {
                   outbit = TYPE_Nd;
                 for (indexbit = 0, iterbit = 1;                  for (indexbit = 0, iterbit = 1;
                      indexbit < mansearch_keymax;                       indexbit < mansearch_keymax;
                      indexbit++, iterbit <<= 1) {                       indexbit++, iterbit <<= 1) {
Line 205  mansearch(const struct mansearch *search,
Line 206  mansearch(const struct mansearch *search,
                                 break;                                  break;
                         }                          }
                 }                  }
         }          } else
                   outbit = 0;
   
         /*          /*
          * Save a descriptor to the current working directory.           * Save a descriptor to the current working directory.
Line 412  buildnames(const struct mansearch *search, struct manp
Line 414  buildnames(const struct mansearch *search, struct manp
                 sqlite3 *db, sqlite3_stmt *s,                  sqlite3 *db, sqlite3_stmt *s,
                 uint64_t pageid, const char *path, int form)                  uint64_t pageid, const char *path, int form)
 {  {
         char            *newnames, *prevsec, *prevarch;          glob_t           globinfo;
           char            *firstname, *newnames, *prevsec, *prevarch;
         const char      *oldnames, *sep1, *name, *sec, *sep2, *arch, *fsec;          const char      *oldnames, *sep1, *name, *sec, *sep2, *arch, *fsec;
         size_t           i;          size_t           i;
         int              c;          int              c, globres;
   
         mpage->file = NULL;          mpage->file = NULL;
         mpage->names = NULL;          mpage->names = NULL;
         prevsec = prevarch = NULL;          firstname = prevsec = prevarch = NULL;
         i = 1;          i = 1;
         SQL_BIND_INT64(db, s, i, pageid);          SQL_BIND_INT64(db, s, i, pageid);
         while (SQLITE_ROW == (c = sqlite3_step(s))) {          while (SQLITE_ROW == (c = sqlite3_step(s))) {
Line 494  buildnames(const struct mansearch *search, struct manp
Line 497  buildnames(const struct mansearch *search, struct manp
                 sep2 = *arch == '\0' ? "" : "/";                  sep2 = *arch == '\0' ? "" : "/";
                 mandoc_asprintf(&mpage->file, "%s/%s%s%s%s/%s.%s",                  mandoc_asprintf(&mpage->file, "%s/%s%s%s%s/%s.%s",
                     path, sep1, sec, sep2, arch, name, fsec);                      path, sep1, sec, sep2, arch, name, fsec);
                   if (access(mpage->file, R_OK) != -1)
                           continue;
   
                   /* Handle unusual file name extensions. */
   
                   if (firstname == NULL)
                           firstname = mpage->file;
                   else
                           free(mpage->file);
                   mandoc_asprintf(&mpage->file, "%s/%s%s%s%s/%s.*",
                       path, sep1, sec, sep2, arch, name);
                   globres = glob(mpage->file, 0, NULL, &globinfo);
                   free(mpage->file);
                   mpage->file = globres ? NULL :
                       mandoc_strdup(*globinfo.gl_pathv);
                   globfree(&globinfo);
         }          }
         if (c != SQLITE_DONE)          if (c != SQLITE_DONE)
                 fprintf(stderr, "%s\n", sqlite3_errmsg(db));                  fprintf(stderr, "%s\n", sqlite3_errmsg(db));
         sqlite3_reset(s);          sqlite3_reset(s);
   
           /* If none of the files is usable, use the first name. */
   
           if (mpage->file == NULL)
                   mpage->file = firstname;
           else if (mpage->file != firstname)
                   free(firstname);
   
         /* Append one final section to the names. */          /* Append one final section to the names. */
   

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.56

CVSweb