=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mandocdb.c,v retrieving revision 1.79 retrieving revision 1.80 diff -c -r1.79 -r1.80 *** src/usr.bin/mandoc/mandocdb.c 2014/03/23 12:44:18 1.79 --- src/usr.bin/mandoc/mandocdb.c 2014/03/26 20:53:31 1.80 *************** *** 1,4 **** ! /* $Id: mandocdb.c,v 1.79 2014/03/23 12:44:18 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze --- 1,4 ---- ! /* $Id: mandocdb.c,v 1.80 2014/03/26 20:53:31 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze *************** *** 543,549 **** f = fts_open((char * const *)argv, FTS_LOGICAL, NULL); if (NULL == f) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", NULL); return(0); } --- 543,549 ---- f = fts_open((char * const *)argv, FTS_LOGICAL, NULL); if (NULL == f) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&fts_open"); return(0); } *************** *** 697,703 **** if (NULL == realpath(file, buf)) { exitcode = (int)MANDOCLEVEL_BADARG; ! say(file, NULL); return; } --- 697,703 ---- if (NULL == realpath(file, buf)) { exitcode = (int)MANDOCLEVEL_BADARG; ! say(file, "&realpath"); return; } *************** *** 713,719 **** if (-1 == stat(buf, &st)) { exitcode = (int)MANDOCLEVEL_BADARG; ! say(file, NULL); return; } else if ( ! (S_IFREG & st.st_mode)) { exitcode = (int)MANDOCLEVEL_BADARG; --- 713,719 ---- if (-1 == stat(buf, &st)) { exitcode = (int)MANDOCLEVEL_BADARG; ! say(file, "&stat"); return; } else if ( ! (S_IFREG & st.st_mode)) { exitcode = (int)MANDOCLEVEL_BADARG; *************** *** 1116,1122 **** if (NULL == (stream = fopen(mpage->mlinks->file, "r"))) { if (warnings) ! say(mpage->mlinks->file, NULL); return; } --- 1116,1122 ---- if (NULL == (stream = fopen(mpage->mlinks->file, "r"))) { if (warnings) ! say(mpage->mlinks->file, "&fopen"); return; } *************** *** 1873,1879 **** if ('\0' == *tempfilename) { if (-1 == rename(MANDOC_DB "~", MANDOC_DB)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(MANDOC_DB, "%s", strerror(errno)); } return; } --- 1873,1879 ---- if ('\0' == *tempfilename) { if (-1 == rename(MANDOC_DB "~", MANDOC_DB)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(MANDOC_DB, "&rename"); } return; } *************** *** 1881,1902 **** switch (child = fork()) { case (-1): exitcode = (int)MANDOCLEVEL_SYSERR; ! say("fork cmp", "%s", strerror(errno)); return; case (0): execlp("cmp", "cmp", "-s", tempfilename, MANDOC_DB, NULL); ! say("exec cmp", "%s", strerror(errno)); exit(0); default: break; } if (-1 == waitpid(child, &status, 0)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("wait cmp", "%s", strerror(errno)); } else if (WIFSIGNALED(status)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("cmp", "Died from a signal"); } else if (WEXITSTATUS(status)) { exitcode = (int)MANDOCLEVEL_SYSERR; say(MANDOC_DB, --- 1881,1902 ---- switch (child = fork()) { case (-1): exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&fork cmp"); return; case (0): execlp("cmp", "cmp", "-s", tempfilename, MANDOC_DB, NULL); ! say("", "&exec cmp"); exit(0); default: break; } if (-1 == waitpid(child, &status, 0)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&wait cmp"); } else if (WIFSIGNALED(status)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "cmp died from signal %d", WTERMSIG(status)); } else if (WEXITSTATUS(status)) { exitcode = (int)MANDOCLEVEL_SYSERR; say(MANDOC_DB, *************** *** 1907,1928 **** switch (child = fork()) { case (-1): exitcode = (int)MANDOCLEVEL_SYSERR; ! say("fork rm", "%s", strerror(errno)); return; case (0): execlp("rm", "rm", "-rf", tempfilename, NULL); ! say("exec rm", "%s", strerror(errno)); exit((int)MANDOCLEVEL_SYSERR); default: break; } if (-1 == waitpid(child, &status, 0)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("wait rm", "%s", strerror(errno)); } else if (WIFSIGNALED(status) || WEXITSTATUS(status)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(tempfilename, ! "Cannot remove temporary directory"); } } --- 1907,1928 ---- switch (child = fork()) { case (-1): exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&fork rm"); return; case (0): execlp("rm", "rm", "-rf", tempfilename, NULL); ! say("", "&exec rm"); exit((int)MANDOCLEVEL_SYSERR); default: break; } if (-1 == waitpid(child, &status, 0)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&wait rm"); } else if (WIFSIGNALED(status) || WEXITSTATUS(status)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "%s: Cannot remove temporary directory", ! tempfilename); } } *************** *** 1971,1994 **** if (strlcpy(tempfilename, "/tmp/mandocdb.XXXXXX", sizeof(tempfilename)) >= sizeof(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("/tmp/mandocdb.XXXXXX", "Filename too long"); return(0); } if (NULL == mkdtemp(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(tempfilename, "%s", strerror(errno)); return(0); } if (strlcat(tempfilename, "/" MANDOC_DB, sizeof(tempfilename)) >= sizeof(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(tempfilename, "Filename too long"); return(0); } rc = sqlite3_open_v2(tempfilename, &db, ofl, NULL); if (SQLITE_OK != rc) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(tempfilename, "%s", sqlite3_errmsg(db)); return(0); } --- 1971,1995 ---- if (strlcpy(tempfilename, "/tmp/mandocdb.XXXXXX", sizeof(tempfilename)) >= sizeof(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "/tmp/mandocdb.XXXXXX: Filename too long"); return(0); } if (NULL == mkdtemp(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&%s", tempfilename); return(0); } if (strlcat(tempfilename, "/" MANDOC_DB, sizeof(tempfilename)) >= sizeof(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "%s/" MANDOC_DB ": Filename too long", ! tempfilename); return(0); } rc = sqlite3_open_v2(tempfilename, &db, ofl, NULL); if (SQLITE_OK != rc) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "%s: %s", tempfilename, sqlite3_errmsg(db)); return(0); } *************** *** 2083,2094 **** if (NULL == getcwd(startdir, PATH_MAX)) { exitcode = (int)MANDOCLEVEL_SYSERR; if (NULL != targetdir) ! say(".", NULL); return(0); } if (-1 == (fd = open(startdir, O_RDONLY, 0))) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say(startdir, NULL); return(0); } if (NULL == targetdir) --- 2084,2095 ---- if (NULL == getcwd(startdir, PATH_MAX)) { exitcode = (int)MANDOCLEVEL_SYSERR; if (NULL != targetdir) ! say("", "&getcwd"); return(0); } if (-1 == (fd = open(startdir, O_RDONLY, 0))) { exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&open %s", startdir); return(0); } if (NULL == targetdir) *************** *** 2100,2106 **** close(fd); basedir[0] = '\0'; exitcode = (int)MANDOCLEVEL_SYSERR; ! say(startdir, NULL); return(0); } if (NULL == targetdir) { --- 2101,2107 ---- close(fd); basedir[0] = '\0'; exitcode = (int)MANDOCLEVEL_SYSERR; ! say("", "&chdir %s", startdir); return(0); } if (NULL == targetdir) { *************** *** 2111,2121 **** if (NULL == realpath(targetdir, basedir)) { basedir[0] = '\0'; exitcode = (int)MANDOCLEVEL_BADARG; ! say(targetdir, NULL); return(0); } else if (-1 == chdir(basedir)) { exitcode = (int)MANDOCLEVEL_BADARG; ! say("", NULL); return(0); } return(1); --- 2112,2122 ---- if (NULL == realpath(targetdir, basedir)) { basedir[0] = '\0'; exitcode = (int)MANDOCLEVEL_BADARG; ! say("", "&%s: realpath", targetdir); return(0); } else if (-1 == chdir(basedir)) { exitcode = (int)MANDOCLEVEL_BADARG; ! say("", "&chdir"); return(0); } return(1); *************** *** 2125,2130 **** --- 2126,2132 ---- say(const char *file, const char *format, ...) { va_list ap; + int use_errno; if ('\0' != *basedir) fprintf(stderr, "%s", basedir); *************** *** 2132,2147 **** fputs("//", stderr); if ('\0' != *file) fprintf(stderr, "%s", file); - fputs(": ", stderr); ! if (NULL == format) { ! perror(NULL); ! return; } ! ! va_start(ap, format); ! vfprintf(stderr, format, ap); ! va_end(ap); ! ! fputc('\n', stderr); } --- 2134,2165 ---- fputs("//", stderr); if ('\0' != *file) fprintf(stderr, "%s", file); ! use_errno = 1; ! if (NULL != format) { ! switch (*format) { ! case ('&'): ! format++; ! break; ! case ('\0'): ! format = NULL; ! break; ! default: ! use_errno = 0; ! break; ! } } ! if (NULL != format) { ! if ('\0' != *basedir || '\0' != *file) ! fputs(": ", stderr); ! va_start(ap, format); ! vfprintf(stderr, format, ap); ! va_end(ap); ! } ! if (use_errno) { ! if ('\0' != *basedir || '\0' != *file || NULL != format) ! fputs(": ", stderr); ! perror(NULL); ! } else ! fputc('\n', stderr); }