diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-08-18 00:07:39 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-08-18 00:07:39 (GMT) |
commit | 2424c52c4f3bc44ce5f36348442cfa103e0989c2 (patch) | |
tree | f68aea488f403b234d4fcc6fd6e0f7b88a628ac8 /src/rost.c | |
parent | 1c5a0e67186def152536d9c506e2e6c3a3a265c5 (diff) |
Create some modifiers and handle match properties inside ROST.
Diffstat (limited to 'src/rost.c')
-rw-r--r-- | src/rost.c | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -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)); |