wireshark/tools/make-lib.c

90 lines
1.9 KiB
C

/* make-lib.c
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "make-lib.h"
#ifdef _WIN32
#define SEP "\r\n"
#else
#define SEP "\n"
#endif
int
compare_symbols(gconstpointer a, gconstpointer b)
{
return g_strcmp0(*(const char **)a, *(const char **)b);
}
static void
scan_matches(GRegex *regex, const char *string, GPtrArray *dst)
{
GMatchInfo *match_info;
char *match;
g_regex_match(regex, string, G_REGEX_MATCH_NOTEMPTY, &match_info);
while (g_match_info_matches(match_info)) {
match = g_match_info_fetch(match_info, 1);
g_ptr_array_add(dst, match);
g_match_info_next(match_info, NULL);
}
g_match_info_free(match_info);
}
void
scan_file(const char *file, struct symbol_item *items, size_t items_len)
{
char *contents;
GError *err = NULL;
size_t i;
if (!g_file_get_contents(file, &contents, NULL, &err)) {
fprintf(stderr, "%s: %s\n", file, err->message);
exit(1);
}
for (i = 0; i < items_len; i++) {
scan_matches(items[i].regex, contents, items[i].ptr_array);
}
g_free(contents);
}
void
scan_list(const char *file, struct symbol_item *items, size_t items_len)
{
char *contents, *arg;
GError *err = NULL;
if (!g_file_get_contents(file, &contents, NULL, &err)) {
fprintf(stderr, "%s: %s\n", file, err->message);
exit(1);
}
for (arg = strtok(contents, SEP); arg != NULL; arg = strtok(NULL, SEP)) {
scan_file(arg, items, items_len);
}
g_free(contents);
}
/*
* Editor modelines
*
* Local Variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* ex: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/