source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: If no tags were generated at all, unlink(2) the empty tags file
@ 2019-07-19 20:27 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2019-07-19 20:27 UTC (permalink / raw)
  To: source

Log Message:
-----------
If no tags were generated at all, unlink(2) the empty tags file as 
soon as the condition can be detected and do not pass it to less(1).
This may happen for man(7) pages, for preformatted pages, and for
very simple pages like true(1).  The main benefit is that :t inside
less(1) yields the clearer diagnostic message "No tags file" rather
than the mildly confusing "No such tag in tags file": the latter
might encourage further, futile attempts to jump to other tags.

Improvement suggested by Leah Neukirchen <leah at vuxu dot org>
from The Void.

Modified Files:
--------------
    mandoc:
        main.c
        tag.c

Revision Data
-------------
Index: main.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/main.c,v
retrieving revision 1.331
retrieving revision 1.332
diff -Lmain.c -Lmain.c -u -p -r1.331 -r1.332
--- main.c
+++ main.c
@@ -1194,7 +1194,7 @@ spawn_pager(struct tag_files *tag_files)
 
 	use_ofn = 1;
 #if HAVE_LESS_T
-	if ((cmdlen = strlen(argv[0])) >= 4) {
+	if (*tag_files->tfn != '\0' && (cmdlen = strlen(argv[0])) >= 4) {
 		cp = argv[0] + cmdlen - 4;
 		if (strcmp(cp, "less") == 0) {
 			argv[argc++] = mandoc_strdup("-T");
Index: tag.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tag.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -Ltag.c -Ltag.c -u -p -r1.22 -r1.23
--- tag.c
+++ tag.c
@@ -225,6 +225,7 @@ tag_write(void)
 	struct tag_entry	*entry;
 	size_t			 i;
 	unsigned int		 slot;
+	int			 empty;
 
 	if (tag_files.tfd <= 0)
 		return;
@@ -235,12 +236,16 @@ tag_write(void)
 	}
 	if ((stream = fdopen(tag_files.tfd, "w")) == NULL)
 		mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno));
+	empty = 1;
 	entry = ohash_first(&tag_data, &slot);
 	while (entry != NULL) {
-		if (stream != NULL && entry->prio >= 0)
-			for (i = 0; i < entry->nlines; i++)
+		if (stream != NULL && entry->prio >= 0) {
+			for (i = 0; i < entry->nlines; i++) {
 				fprintf(stream, "%s %s %zu\n",
 				    entry->s, tag_files.ofn, entry->lines[i]);
+				empty = 0;
+			}
+		}
 		free(entry->lines);
 		free(entry);
 		entry = ohash_next(&tag_data, &slot);
@@ -251,6 +256,10 @@ tag_write(void)
 	else
 		close(tag_files.tfd);
 	tag_files.tfd = -1;
+	if (empty) {
+		unlink(tag_files.tfn);
+		*tag_files.tfn = '\0';
+	}
 }
 
 void
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-07-19 20:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-19 20:27 mandoc: If no tags were generated at all, unlink(2) the empty tags file schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).