#include "udev_utils.h"
#include "list.h"
-/* compare string with pattern (supports * ? [0-9] [!A-Z]) */
-int strcmp_pattern(const char *p, const char *s)
-{
- if (s[0] == '\0') {
- while (p[0] == '*')
- p++;
- return (p[0] != '\0');
- }
- switch (p[0]) {
- case '[':
- {
- int not = 0;
- p++;
- if (p[0] == '!') {
- not = 1;
- p++;
- }
- while ((p[0] != '\0') && (p[0] != ']')) {
- int match = 0;
- if (p[1] == '-') {
- if ((s[0] >= p[0]) && (s[0] <= p[2]))
- match = 1;
- p += 3;
- } else {
- match = (p[0] == s[0]);
- p++;
- }
- if (match ^ not) {
- while ((p[0] != '\0') && (p[0] != ']'))
- p++;
- if (p[0] == ']')
- return strcmp_pattern(p+1, s+1);
- }
- }
- }
- break;
- case '*':
- if (strcmp_pattern(p, s+1))
- return strcmp_pattern(p+1, s);
- return 0;
- case '\0':
- if (s[0] == '\0') {
- return 0;
- }
- break;
- default:
- if ((p[0] == s[0]) || (p[0] == '?'))
- return strcmp_pattern(p+1, s+1);
- break;
- }
- return 1;
-}
-
-int string_is_true(const char *str)
-{
- if (strcasecmp(str, "true") == 0)
- return 1;
- if (strcasecmp(str, "yes") == 0)
- return 1;
- if (strcasecmp(str, "1") == 0)
- return 1;
- return 0;
-}
int log_priority(const char *priority)
{
return 0;
}
-int kernel_release_satisfactory(unsigned int version, unsigned int patchlevel, unsigned int sublevel)
-{
- static unsigned int kversion = 0;
- static unsigned int kpatchlevel;
- static unsigned int ksublevel;
-
- if (kversion == 0) {
- struct utsname uts;
- if (uname(&uts) != 0)
- return -1;
-
- if (sscanf (uts.release, "%u.%u.%u", &kversion, &kpatchlevel, &ksublevel) != 3) {
- kversion = 0;
- return -1;
- }
- }
-
- if (kversion >= version && kpatchlevel >= patchlevel && ksublevel >= sublevel)
- return 1;
- else
- return 0;
-}
-
-void replace_untrusted_chars(char *string)
-{
- size_t len;
-
- for (len = 0; string[len] != '\0'; len++) {
- if (strchr(";,~\\()\'", string[len])) {
- info("replace '%c' in '%s'", string[len], string);
- string[len] = '_';
- }
- }
-}
-
-void remove_trailing_char(char *path, char c)
-{
- size_t len;
-
- len = strlen(path);
- while (len > 0 && path[len-1] == c)
- path[--len] = '\0';
-}
-
int name_list_add(struct list_head *name_list, const char *name, int sort)
{
struct name_entry *loop_name;
return 0;
}
+void name_list_cleanup(struct list_head *name_list)
+{
+ struct name_entry *name_loop;
+ struct name_entry *temp_loop;
+
+ list_for_each_entry_safe(name_loop, temp_loop, name_list, node) {
+ list_del(&name_loop->node);
+ free(name_loop);
+ }
+}
+
/* calls function for every file found in specified directory */
int add_matching_files(struct list_head *name_list, const char *dirname, const char *suffix)
{
dbg("open directory '%s'", dirname);
dir = opendir(dirname);
if (dir == NULL) {
- dbg("unable to open '%s'", dirname);
+ err("unable to open '%s': %s", dirname, strerror(errno));
return -1;
}