aboutsummaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2019-07-13 10:08:36 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2019-07-29 19:44:59 -0700
commit0dca7a1e165cdffa0065455b377d2658f33f4ea2 (patch)
tree47b9cbefc77b443881b28eb8c910bb8615cb8e2d /deps
parent4cfbf4907fa8221b7d8fcd7aa74ffd1d45691ef6 (diff)
vendor.ids update and vendor.{h,c} improvements from sysobj version
* more fields in struct Vendor. * match_case -> match_rule and new match rule "exact". match_rule remains compatible with match_case for old conf format. * matches must be "whole word" matches so "Harmony" no longer hits for "ARM". * Parts outside of () are checked first, so "Foo (formerly Barly)" matches Foo before Barly, even though Barly is longer and would otherwise match first. * vendor_list type (a blessed GSList*) and helper functions to manage it. Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'deps')
-rw-r--r--deps/sysobj_early/include/gg_slist.h30
-rw-r--r--deps/sysobj_early/include/strstr_word.h30
-rw-r--r--deps/sysobj_early/src/gg_slist.c49
-rw-r--r--deps/sysobj_early/src/strstr_word.c64
4 files changed, 173 insertions, 0 deletions
diff --git a/deps/sysobj_early/include/gg_slist.h b/deps/sysobj_early/include/gg_slist.h
new file mode 100644
index 00000000..255465ee
--- /dev/null
+++ b/deps/sysobj_early/include/gg_slist.h
@@ -0,0 +1,30 @@
+/*
+ * sysobj - https://github.com/bp0/verbose-spork
+ * Copyright (C) 2018 Burt P. <pburt0@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef _GG_SLIST_H_
+#define _GG_SLIST_H_
+
+#include <glib.h>
+
+GSList *gg_slist_remove_null(GSList *sl);
+GSList *gg_slist_remove_duplicates(GSList *sl); /* by pointer */
+GSList *gg_slist_remove_duplicates_custom(GSList *sl, GCompareFunc func);
+
+#endif
diff --git a/deps/sysobj_early/include/strstr_word.h b/deps/sysobj_early/include/strstr_word.h
new file mode 100644
index 00000000..f607b2ed
--- /dev/null
+++ b/deps/sysobj_early/include/strstr_word.h
@@ -0,0 +1,30 @@
+/*
+ * sysobj - https://github.com/bp0/verbose-spork
+ * Copyright (C) 2018 Burt P. <pburt0@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/* versions of strstr() and strcasestr() where the match must be preceded and
+ * succeded by a non-alpha-numeric character. */
+
+#ifndef __STRSTR_WORD_H__
+#define __STRSTR_WORD_H__
+
+char *strstr_word(const char *haystack, const char *needle);
+char *strcasestr_word(const char *haystack, const char *needle);
+
+#endif
diff --git a/deps/sysobj_early/src/gg_slist.c b/deps/sysobj_early/src/gg_slist.c
new file mode 100644
index 00000000..595dbc46
--- /dev/null
+++ b/deps/sysobj_early/src/gg_slist.c
@@ -0,0 +1,49 @@
+/*
+ * sysobj - https://github.com/bp0/verbose-spork
+ * Copyright (C) 2018 Burt P. <pburt0@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <glib.h>
+
+GSList *gg_slist_remove_duplicates(GSList *sl) {
+ for (GSList *l = sl; l; l = l->next) {
+ GSList *d = NULL;
+ while(d = g_slist_find(l->next, l->data) )
+ sl = g_slist_delete_link(sl, d);
+ }
+ return sl;
+}
+
+GSList *gg_slist_remove_duplicates_custom(GSList *sl, GCompareFunc func) {
+ for (GSList *l = sl; l; l = l->next) {
+ GSList *d = NULL;
+ while(d = g_slist_find_custom(l->next, l->data, func) )
+ sl = g_slist_delete_link(sl, d);
+ }
+ return sl;
+}
+
+GSList *gg_slist_remove_null(GSList *sl) {
+ GSList *n = sl ? sl->next : NULL;
+ for (GSList *l = sl; l; l = n) {
+ n = l->next;
+ if (l->data == NULL)
+ sl = g_slist_delete_link(sl, l);
+ }
+ return sl;
+}
diff --git a/deps/sysobj_early/src/strstr_word.c b/deps/sysobj_early/src/strstr_word.c
new file mode 100644
index 00000000..b12f01a2
--- /dev/null
+++ b/deps/sysobj_early/src/strstr_word.c
@@ -0,0 +1,64 @@
+/*
+ * sysobj - https://github.com/bp0/verbose-spork
+ * Copyright (C) 2018 Burt P. <pburt0@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/* versions of strstr() and strcasestr() where the match must be preceded and
+ * succeded by a non-alpha-numeric character. */
+
+#define _GNU_SOURCE
+#include <string.h>
+#include <ctype.h>
+
+char *strstr_word(const char *haystack, const char *needle) {
+ if (!haystack || !needle)
+ return NULL;
+
+ char *c;
+ const char *p = haystack;
+ size_t l = strlen(needle);
+ while(c = strstr(p, needle)) {
+ const char *before = (c == haystack) ? NULL : c-1;
+ const char *after = c + l;
+ int ok = 1;
+ if (isalnum(*after)) ok = 0;
+ if (before && isalnum(*before)) ok = 0;
+ if (ok) return c;
+ p++;
+ }
+ return NULL;
+}
+
+char *strcasestr_word(const char *haystack, const char *needle) {
+ if (!haystack || !needle)
+ return NULL;
+
+ char *c;
+ const char *p = haystack;
+ size_t l = strlen(needle);
+ while(c = strcasestr(p, needle)) {
+ const char *before = (c == haystack) ? NULL : c-1;
+ const char *after = c + l;
+ int ok = 1;
+ if (isalnum(*after)) ok = 0;
+ if (before && isalnum(*before)) ok = 0;
+ if (ok) return c;
+ p++;
+ }
+ return NULL;
+}