summaryrefslogtreecommitdiff
path: root/src/rost.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rost.c')
-rw-r--r--src/rost.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/rost.c b/src/rost.c
index 40fe587..66f2ba6 100644
--- a/src/rost.c
+++ b/src/rost.c
@@ -87,6 +87,8 @@ static void show_rost_help(const char *name)
printf("\n");
printf("\t-A --algorithm=name\tSelect one of the available algorithms for data: bitmap, acism (default: acsim).\n");
+ printf("\t-j --print-json\t\tPrint matching strings in JSON format.\n");
+ printf("\t-s --print-strings\tPrint matching strings.\n");
printf("\t-S --print-stats\tPrint rules' statistics.\n");
printf("\t-V --verbosity=level\tSet the log level (0 for all messages, %u for none).\n", LMT_COUNT);
@@ -165,11 +167,14 @@ int main(int argc, char **argv)
GContentScanner *scanner; /* Encadrement d'une recherche */
GBinContent *content; /* Contenu à analyser */
GScanContext *context; /* Contexte des trouvailles */
+ sized_string_t padding; /* Bourrage pour le JSON */
static struct option long_options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, 'v' },
{ "algorithm", required_argument, NULL, 'A' },
+ { "print-json", no_argument, NULL, 'j' },
+ { "print-strings", no_argument, NULL, 's' },
{ "print-stats", no_argument, NULL, 'S' },
{ "verbosity", required_argument, NULL, 'V' },
{ NULL, 0, NULL, 0 }
@@ -190,7 +195,7 @@ int main(int argc, char **argv)
while (true)
{
- ret = getopt_long(argc, argv, "hvA:SV:", long_options, &index);
+ ret = getopt_long(argc, argv, "hvA:jsSV:", long_options, &index);
if (ret == -1) break;
switch (ret)
@@ -212,6 +217,14 @@ int main(int argc, char **argv)
g_scan_options_set_backend_for_data(options, G_TYPE_INVALID);
break;
+ case 'j':
+ g_scan_options_set_print_json(options, true);
+ break;
+
+ case 's':
+ g_scan_options_set_print_strings(options, true);
+ break;
+
case 'S':
g_scan_options_set_print_stats(options, true);
break;
@@ -288,7 +301,16 @@ int main(int argc, char **argv)
context = g_content_scanner_analyze(scanner, options, content);
- g_scan_context_display(context);
+ if (g_scan_options_get_print_json(options))
+ {
+ padding.data = " ";
+ padding.len = 3;
+
+ g_content_scanner_output_to_json(scanner, context, &padding, 0, STDOUT_FILENO);
+
+ }
+ else
+ g_content_scanner_output_to_text(scanner, context, STDOUT_FILENO);
g_object_unref(G_OBJECT(context));
g_object_unref(G_OBJECT(content));