Print this page
Latest round of fixes per RM and AL.  Fix bugs found in man.c.

*** 26,35 **** --- 26,36 ---- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Copyright 2012 Nexenta Systems, Inc. All rights reserved. + * Copyright 2014 Garrett D'Amore <garrett@damore.org> */ #include <sys/types.h> #include <sys/stat.h> #include <sys/param.h>
*** 174,193 **** static void sbuf_need(struct sbuf *sbuf, int nchars) { char *new_content; size_t size, cntsize; ! /* Double the size of the allocation until the buffer is big enough */ ! while (sbuf->end + nchars > sbuf->last) { size = sbuf->last + 1 - sbuf->content; ! size *= 2; cntsize = sbuf->end - sbuf->content; ! new_content = (char *)malloc(size); ! (void) memcpy(new_content, sbuf->content, cntsize); ! free(sbuf->content); sbuf->content = new_content; sbuf->end = new_content + cntsize; sbuf->last = new_content + size - 1; } } --- 175,202 ---- static void sbuf_need(struct sbuf *sbuf, int nchars) { char *new_content; size_t size, cntsize; + size_t grow = 128; ! while (grow < nchars) { ! grow += 128; /* we grow in chunks of 128 bytes */ ! } ! ! /* Grow if the buffer isn't big enough */ ! if (sbuf->end + nchars > sbuf->last) { size = sbuf->last + 1 - sbuf->content; ! size += grow; cntsize = sbuf->end - sbuf->content; ! if ((new_content = realloc(sbuf->content, size)) == NULL) { ! perror("realloc"); ! if (tempfile[0] != '\0') ! (void) unlink(tempfile); ! exit(1); ! } sbuf->content = new_content; sbuf->end = new_content + cntsize; sbuf->last = new_content + size - 1; } }
*** 257,278 **** */ static int no_page_exists(char *dir, stringlist *names, char *suffix) { char path[MAXPATHLEN]; size_t i; for (i = 0; i < names->sl_cur; i++) { ! (void) snprintf(path, MAXPATHLEN, "%s/%s.%s.gz", ! dir, names->sl_str[i], suffix); ! if (access(path, F_OK) < 0) { ! path[strlen(path) - 3] = '\0'; ! if (access(path, F_OK) < 0) ! continue; ! } return (0); } return (1); } /* ARGSUSED sig */ static void --- 266,288 ---- */ static int no_page_exists(char *dir, stringlist *names, char *suffix) { char path[MAXPATHLEN]; + char *suffixes[] = { "", ".gz", ".bz2", NULL }; size_t i; + int j; for (i = 0; i < names->sl_cur; i++) { ! for (j = 0; suffixes[j] != NULL; j++) { ! (void) snprintf(path, MAXPATHLEN, "%s/%s.%s%s", ! dir, names->sl_str[i], suffix, suffixes[j]); ! if (access(path, F_OK) == 0) { return (0); } + } + } return (1); } /* ARGSUSED sig */ static void