Skip to content

Commit 9e7028a

Browse files
committed
readtags: experimental support for specifying -t multiple times
$ ~/bin/ctags -o podman.tags -R ~/var/podman $ ~/bin/ctags -o glibc.tags -R ~/var/glibc $ ~/bin/ctags -o coreutils832.tags -R /srv/sources9c/sources/c/coreutils/8.32-31.el9--srpm/pre-build/coreutils-8.32 $ ./readtags -A -Q '(and (eq? $name "main") (#/.*user.*/ $input))' -t podman.tags -t glibc.tags -t coreutils832.tags -l main /srv/sources9c/sources/c/coreutils/8.32-31.el9--srpm/pre-build/coreutils-8.32/gnulib-tests/test-userspec.c /^main (void)$/ main /srv/sources9c/sources/c/coreutils/8.32-31.el9--srpm/pre-build/coreutils-8.32/lib/getusershell.c /^main (void)$/ main /srv/sources9c/sources/c/coreutils/8.32-31.el9--srpm/pre-build/coreutils-8.32/lib/userspec.c /^main (int argc, char **argv)$/ main /srv/sources9c/sources/c/coreutils/8.32-31.el9--srpm/pre-build/coreutils-8.32/src/users.c /^main (int argc, char **argv)$/ $ ./readtags -A -Q '(and (eq? $name "main") (#/.*container.*/ $input))' -t podman.tags -t glibc.tags -t coreutils832.tags -l main /home/yamato/var/glibc/support/echo-container.c /^main (int argc, const char **argv)$/ main /home/yamato/var/glibc/support/shell-container.c /^main (int argc, const char **argv)$/ main /home/yamato/var/glibc/support/test-container.c /^main (int argc, char **argv)$/ main /home/yamato/var/glibc/support/true-container.c /^main (void)$/ $ ./readtags -A -Q '(not (#/.*_test.*/ $input))' -t podman.tags -t glibc.tags -t coreutils832.tags rootless rootless /home/yamato/var/podman/pkg/rootless/rootless.go /^package rootless$/ rootless /home/yamato/var/podman/pkg/rootless/rootless_freebsd.go /^package rootless$/ rootless /home/yamato/var/podman/pkg/rootless/rootless_linux.go /^package rootless$/ rootless /home/yamato/var/podman/pkg/rootless/rootless_unsupported.go /^package rootless$/ rootless /home/yamato/var/podman/vendor/github.com/containers/image/v5/internal/rootless/rootless.go /^package rootless$/ Signed-off-by: Masatake YAMATO <[email protected]>
1 parent d1ecc51 commit 9e7028a

File tree

1 file changed

+59
-29
lines changed

1 file changed

+59
-29
lines changed

extra-cmds/readtags-cmd.c

Lines changed: 59 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "vstring.h"
1818
#include "htable.h"
1919
#include "fname.h"
20+
#include "ptrarray.h"
2021

2122
#include <string.h> /* strerror */
2223
#include <stdlib.h> /* exit */
@@ -707,17 +708,37 @@ static void printVersion(void)
707708
exit (0);
708709
}
709710

711+
static void deleteInputSpec (void *data)
712+
{
713+
struct inputSpec *inputSpec = data;
714+
if (inputSpec->tempFileName)
715+
{
716+
remove (inputSpec->tempFileName);
717+
eFree (inputSpec->tempFileName);
718+
}
719+
eFree (data);
720+
}
721+
722+
static void addInputSpec (ptrArray *inputSpecs, const char *name)
723+
{
724+
struct inputSpec *i = eMalloc (sizeof (struct inputSpec));
725+
726+
i->tagFileName = name;
727+
i->tempFileName = NULL;
728+
729+
ptrArrayAdd (inputSpecs, i);
730+
}
731+
710732
extern int main (int argc, char **argv)
711733
{
712734
int i;
713735
int ignore_prefix = 0;
714736

715737
tagPrintOptions printOpts;
716738
readOptions readOpts;
717-
struct inputSpec inputSpec = {
718-
.tagFileName = "tags",
719-
.tempFileName = NULL,
720-
};
739+
740+
ptrArray *inputSpecs = ptrArrayNew (deleteInputSpec);
741+
721742
struct actionSpec actionSpec = {
722743
.action = ACTION_NONE,
723744
.name = NULL,
@@ -801,7 +822,7 @@ extern int main (int argc, char **argv)
801822
else if (strcmp (optname, "tag-file") == 0)
802823
{
803824
if (i + 1 < argc)
804-
inputSpec.tagFileName = argv [++i];
825+
addInputSpec (inputSpecs, argv[++i]);
805826
else
806827
printUsage (stderr, 1);
807828
}
@@ -934,11 +955,12 @@ extern int main (int argc, char **argv)
934955
case 't':
935956
if (arg [j+1] != '\0')
936957
{
937-
inputSpec.tagFileName = arg + j + 1;
938-
j += strlen (inputSpec.tagFileName);
958+
const char *tname = arg + j + 1;
959+
addInputSpec (inputSpecs, tname);
960+
j += strlen (tname);
939961
}
940962
else if (i + 1 < argc)
941-
inputSpec.tagFileName = argv [++i];
963+
addInputSpec (inputSpecs, argv [++i]);
942964
else
943965
printUsage(stderr, 1);
944966
break;
@@ -1010,22 +1032,38 @@ extern int main (int argc, char **argv)
10101032
exit (1);
10111033
}
10121034

1013-
if (actionSpec.action & ACTION_LIST_PTAGS)
1035+
if (ptrArrayIsEmpty (inputSpecs))
1036+
addInputSpec (inputSpecs, "tags");
1037+
1038+
for (unsigned int i = 0; i < ptrArrayCount (inputSpecs); i++)
10141039
{
1015-
if (actionSpec.canonicalizing)
1016-
actionSpec.canon.ptags = true;
1017-
listTags (&inputSpec, 1, &printOpts,
1018-
actionSpec.canonicalizing? &actionSpec.canon: NULL);
1019-
if (actionSpec.canonicalizing)
1020-
actionSpec.canon.ptags = false;
1040+
struct inputSpec *inputSpec = ptrArrayItem (inputSpecs, i);
1041+
1042+
if (actionSpec.action & ACTION_LIST_PTAGS)
1043+
{
1044+
if (actionSpec.canonicalizing)
1045+
actionSpec.canon.ptags = true;
1046+
listTags (inputSpec, 1, &printOpts,
1047+
actionSpec.canonicalizing? &actionSpec.canon: NULL);
1048+
if (actionSpec.canonicalizing)
1049+
actionSpec.canon.ptags = false;
1050+
}
1051+
1052+
if (actionSpec.action & ACTION_FIND)
1053+
findTag (inputSpec, actionSpec.name, &readOpts, &printOpts,
1054+
actionSpec.canonicalizing? &actionSpec.canon: NULL);
1055+
else if (actionSpec.action & ACTION_LIST)
1056+
listTags (inputSpec, 0, &printOpts,
1057+
actionSpec.canonicalizing? &actionSpec.canon: NULL);
1058+
1059+
if (actionSpec.canon.cacheTable)
1060+
{
1061+
canonFnameCacheTableDelete (actionSpec.canon.cacheTable);
1062+
actionSpec.canon.cacheTable = NULL;
1063+
}
10211064
}
10221065

1023-
if (actionSpec.action & ACTION_FIND)
1024-
findTag (&inputSpec, actionSpec.name, &readOpts, &printOpts,
1025-
actionSpec.canonicalizing? &actionSpec.canon: NULL);
1026-
else if (actionSpec.action & ACTION_LIST)
1027-
listTags (&inputSpec, 0, &printOpts,
1028-
actionSpec.canonicalizing? &actionSpec.canon: NULL);
1066+
ptrArrayDelete (inputSpecs);
10291067

10301068
#ifdef READTAGS_DSL
10311069
if (Qualifier)
@@ -1036,13 +1074,5 @@ extern int main (int argc, char **argv)
10361074
f_destroy (Formatter);
10371075
#endif
10381076

1039-
if (actionSpec.canon.cacheTable)
1040-
canonFnameCacheTableDelete (actionSpec.canon.cacheTable);
1041-
1042-
if (inputSpec.tempFileName)
1043-
{
1044-
remove (inputSpec.tempFileName);
1045-
eFree (inputSpec.tempFileName);
1046-
}
10471077
return 0;
10481078
}

0 commit comments

Comments
 (0)