Re: mg: drop needless global tagsfn path

2023-03-29 Thread Theo Buehler
On Wed, Mar 29, 2023 at 10:22:09AM +0200, Omar Polo wrote:
> mg keeps the path to the last loaded tag file in tagsfn which was used
> both for the lazily loading (now removed) and as a flag to know if any
> tags are currently loaded.  It's redundant, we can just check if the
> rb tree is empty instead.
> 
> The only difference I can think of is with the corner cases of an
> empty tags file (echo -n > tags): with diff below mg would always ask
> the user which tag file to load on M-. (find-tag) where currently it
> asks only on the first try.  I don't think it's an issue.
> 
> ok?

ok tb



mg: drop needless global tagsfn path

2023-03-29 Thread Omar Polo
mg keeps the path to the last loaded tag file in tagsfn which was used
both for the lazily loading (now removed) and as a flag to know if any
tags are currently loaded.  It's redundant, we can just check if the
rb tree is empty instead.

The only difference I can think of is with the corner cases of an
empty tags file (echo -n > tags): with diff below mg would always ask
the user which tag file to load on M-. (find-tag) where currently it
asks only on the first try.  I don't think it's an issue.

ok?

Index: tags.c
===
RCS file: /cvs/src/usr.bin/mg/tags.c,v
retrieving revision 1.25
diff -u -p -r1.25 tags.c
--- tags.c  29 Mar 2023 07:29:17 -  1.25
+++ tags.c  29 Mar 2023 08:07:23 -
@@ -38,8 +38,6 @@ static void  unloadtags(void
 
 #define DEFAULTFN "tags"
 
-char *tagsfn = NULL;
-
 /* ctags(1) entries are parsed and maintained in a tree. */
 struct ctag {
RB_ENTRY(ctag) entry;
@@ -87,42 +85,18 @@ tagsvisit(int f, int n)
if (bufp == NULL)
return (ABORT);
 
-   if (tagsfn == NULL) {
-   if (bufp[0] == '\0') {
-   if ((tagsfn = strdup(fname)) == NULL) {
-   dobeep();
-   ewprintf("Out of memory");
-   return (FALSE);
-   }
-   } else {
-   /* bufp points to local variable, so duplicate. */
-   if ((tagsfn = strdup(bufp)) == NULL) {
-   dobeep();
-   ewprintf("Out of memory");
-   return (FALSE);
-   }
-   }
-   } else {
-   if ((temp = strdup(bufp)) == NULL) {
-   dobeep();
-   ewprintf("Out of memory");
-   return (FALSE);
-   }
-   free(tagsfn);
-   tagsfn = temp;
+   if (!RB_EMPTY()) {
if (eyorn("Keep current list of tags table also") == FALSE) {
ewprintf("Starting a new list of tags table");
unloadtags();
}
}
 
-   if (loadtags(tagsfn) == FALSE) {
-   free(tagsfn);
-   tagsfn = NULL;
-   return (FALSE);
-   }
+   temp = bufp;
+   if (temp[0] == '\0')
+   temp = fname;
 
-   return (TRUE);
+   return (loadtags(temp));
 }
 
 /*
@@ -156,7 +130,7 @@ findtag(int f, int n)
return (FALSE);
}
 
-   if (tagsfn == NULL)
+   if (RB_EMPTY())
if ((ret = tagsvisit(f, n)) != TRUE)
return (ret);
return pushtag(tok);
@@ -328,7 +302,6 @@ closetags(void)
free(s);
}
unloadtags();
-   free(tagsfn);
 }
 
 /*