]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: move util_replace_chars() to udev-util.c
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Dec 2020 07:26:13 +0000 (16:26 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Dec 2020 17:14:47 +0000 (02:14 +0900)
src/libudev/libudev-util.c
src/libudev/libudev-util.h
src/shared/udev-util.c
src/shared/udev-util.h
src/udev/ata_id/ata_id.c
src/udev/scsi_id/scsi_id.c
src/udev/udev-builtin-usb_id.c
src/udev/udev-event.c
src/udev/udev-event.h
src/udev/udev-rules.c

index f4f686fc88a7bfbfe59e41875be945038fe9eadd..8a6b56be5c00598133472eff99c27a33290cae14 100644 (file)
@@ -75,49 +75,6 @@ int util_resolve_subsys_kernel(const char *string, char *result, size_t maxsize,
         return 0;
 }
 
-/* allow chars in allow list, plain ascii, hex-escaping and valid utf8 */
-size_t util_replace_chars(char *str, const char *allow) {
-        size_t i = 0, replaced = 0;
-
-        assert(str);
-
-        while (str[i] != '\0') {
-                int len;
-
-                if (allow_listed_char_for_devnode(str[i], allow)) {
-                        i++;
-                        continue;
-                }
-
-                /* accept hex encoding */
-                if (str[i] == '\\' && str[i+1] == 'x') {
-                        i += 2;
-                        continue;
-                }
-
-                /* accept valid utf8 */
-                len = utf8_encoded_valid_unichar(str + i, (size_t) -1);
-                if (len > 1) {
-                        i += len;
-                        continue;
-                }
-
-                /* if space is allowed, replace whitespace with ordinary space */
-                if (isspace(str[i]) && allow && strchr(allow, ' ')) {
-                        str[i] = ' ';
-                        i++;
-                        replaced++;
-                        continue;
-                }
-
-                /* everything else is replaced with '_' */
-                str[i] = '_';
-                i++;
-                replaced++;
-        }
-        return replaced;
-}
-
 /**
  * udev_util_encode_string:
  * @str: input string to be encoded
index dd0561d90e97a52ab2a43e6ae10019a4944b3dcd..547981311e15a424721a785921f2df45c1b27c48 100644 (file)
@@ -9,8 +9,6 @@
 #define UTIL_PATH_SIZE                      1024
 #define UTIL_NAME_SIZE                       512
 #define UTIL_LINE_SIZE                     16384
-#define UDEV_ALLOWED_CHARS_INPUT        "/ $%?,"
-size_t util_replace_chars(char *str, const char *white);
 int util_resolve_subsys_kernel(const char *string, char *result, size_t maxsize, bool read_value);
 
 /* Cleanup functions */
index 17b9ed137b94f23d58f78a7deeb9755dc5f9d304..d03e4bbe6fd8cd967dda895a7abc3ff6b2b3d238 100644 (file)
@@ -5,6 +5,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "device-nodes.h"
 #include "device-util.h"
 #include "env-file.h"
 #include "escape.h"
@@ -426,3 +427,47 @@ size_t udev_replace_whitespace(const char *str, char *to, size_t len) {
         to[j] = '\0';
         return j;
 }
+
+size_t udev_replace_chars(char *str, const char *allow) {
+        size_t i = 0, replaced = 0;
+
+        assert(str);
+
+        /* allow chars in allow list, plain ascii, hex-escaping and valid utf8. */
+
+        while (str[i] != '\0') {
+                int len;
+
+                if (allow_listed_char_for_devnode(str[i], allow)) {
+                        i++;
+                        continue;
+                }
+
+                /* accept hex encoding */
+                if (str[i] == '\\' && str[i+1] == 'x') {
+                        i += 2;
+                        continue;
+                }
+
+                /* accept valid utf8 */
+                len = utf8_encoded_valid_unichar(str + i, (size_t) -1);
+                if (len > 1) {
+                        i += len;
+                        continue;
+                }
+
+                /* if space is allowed, replace whitespace with ordinary space */
+                if (isspace(str[i]) && allow && strchr(allow, ' ')) {
+                        str[i] = ' ';
+                        i++;
+                        replaced++;
+                        continue;
+                }
+
+                /* everything else is replaced with '_' */
+                str[i] = '_';
+                i++;
+                replaced++;
+        }
+        return replaced;
+}
index d0ebbede418199d1d15a43195040a73b32fc0073..f20e32b4d2db99dac6f229162b28cb35041c8c40 100644 (file)
@@ -37,3 +37,4 @@ void log_device_uevent(sd_device *device, const char *str);
 
 int udev_rule_parse_value(char *str, char **ret_value, char **ret_endpos);
 size_t udev_replace_whitespace(const char *str, char *to, size_t len);
+size_t udev_replace_chars(char *str, const char *allow);
index 434b8765aa9908f0963f57d84513d892f9404956..9d22be81b2e4a1d4a4aec6f13738c0aa414287c7 100644 (file)
@@ -485,11 +485,11 @@ int main(int argc, char *argv[]) {
         model[40] = '\0';
         udev_util_encode_string(model, model_enc, sizeof(model_enc));
         udev_replace_whitespace((char *) id.model, model, 40);
-        util_replace_chars(model, NULL);
+        udev_replace_chars(model, NULL);
         udev_replace_whitespace((char *) id.serial_no, serial, 20);
-        util_replace_chars(serial, NULL);
+        udev_replace_chars(serial, NULL);
         udev_replace_whitespace((char *) id.fw_rev, revision, 8);
-        util_replace_chars(revision, NULL);
+        udev_replace_chars(revision, NULL);
 
         if (export) {
                 /* Set this to convey the disk speaks the ATA protocol */
index 162bd4e7dfa16e471bb3bc19ae08cc9a4343398a..5d61e38d5e33f9bbd5b47dd15981258a17ba4745 100644 (file)
@@ -457,12 +457,12 @@ static int set_inq_values(struct scsi_id_device *dev_scsi, const char *path) {
         udev_util_encode_string(dev_scsi->model, model_enc_str, sizeof(model_enc_str));
 
         udev_replace_whitespace(dev_scsi->vendor, vendor_str, sizeof(vendor_str)-1);
-        util_replace_chars(vendor_str, NULL);
+        udev_replace_chars(vendor_str, NULL);
         udev_replace_whitespace(dev_scsi->model, model_str, sizeof(model_str)-1);
-        util_replace_chars(model_str, NULL);
+        udev_replace_chars(model_str, NULL);
         set_type(dev_scsi->type, type_str, sizeof(type_str));
         udev_replace_whitespace(dev_scsi->revision, revision_str, sizeof(revision_str)-1);
-        util_replace_chars(revision_str, NULL);
+        udev_replace_chars(revision_str, NULL);
         return 0;
 }
 
@@ -503,10 +503,10 @@ static int scsi_id(char *maj_min_dev) {
                 printf("ID_TYPE=%s\n", type_str);
                 if (dev_scsi.serial[0] != '\0') {
                         udev_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)-1);
-                        util_replace_chars(serial_str, NULL);
+                        udev_replace_chars(serial_str, NULL);
                         printf("ID_SERIAL=%s\n", serial_str);
                         udev_replace_whitespace(dev_scsi.serial_short, serial_str, sizeof(serial_str)-1);
-                        util_replace_chars(serial_str, NULL);
+                        udev_replace_chars(serial_str, NULL);
                         printf("ID_SERIAL_SHORT=%s\n", serial_str);
                 }
                 if (dev_scsi.wwn[0] != '\0') {
@@ -533,7 +533,7 @@ static int scsi_id(char *maj_min_dev) {
                 char serial_str[MAX_SERIAL_LEN];
 
                 udev_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)-1);
-                util_replace_chars(serial_str, NULL);
+                udev_replace_chars(serial_str, NULL);
                 printf("%s\n", serial_str);
                 goto out;
         }
index aa501a894e3629644bd30a525b0d94a3c74d1c13..b74f7c057aa364fda92000a13c7bc25df35ceb37 100644 (file)
@@ -331,7 +331,7 @@ static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) {
                 }
                 udev_util_encode_string(scsi_vendor, vendor_str_enc, sizeof(vendor_str_enc));
                 udev_replace_whitespace(scsi_vendor, vendor_str, sizeof(vendor_str)-1);
-                util_replace_chars(vendor_str, NULL);
+                udev_replace_chars(vendor_str, NULL);
 
                 r = sd_device_get_sysattr_value(dev_scsi, "model", &scsi_model);
                 if (r < 0) {
@@ -340,7 +340,7 @@ static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) {
                 }
                 udev_util_encode_string(scsi_model, model_str_enc, sizeof(model_str_enc));
                 udev_replace_whitespace(scsi_model, model_str, sizeof(model_str)-1);
-                util_replace_chars(model_str, NULL);
+                udev_replace_chars(model_str, NULL);
 
                 r = sd_device_get_sysattr_value(dev_scsi, "type", &scsi_type);
                 if (r < 0) {
@@ -355,7 +355,7 @@ static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) {
                         goto fallback;
                 }
                 udev_replace_whitespace(scsi_rev, revision_str, sizeof(revision_str)-1);
-                util_replace_chars(revision_str, NULL);
+                udev_replace_chars(revision_str, NULL);
 
                 /*
                  * some broken devices have the same identifiers
@@ -381,7 +381,7 @@ fallback:
                         usb_vendor = vendor_id;
                 udev_util_encode_string(usb_vendor, vendor_str_enc, sizeof(vendor_str_enc));
                 udev_replace_whitespace(usb_vendor, vendor_str, sizeof(vendor_str)-1);
-                util_replace_chars(vendor_str, NULL);
+                udev_replace_chars(vendor_str, NULL);
         }
 
         if (model_str[0] == '\0') {
@@ -391,7 +391,7 @@ fallback:
                         usb_model = product_id;
                 udev_util_encode_string(usb_model, model_str_enc, sizeof(model_str_enc));
                 udev_replace_whitespace(usb_model, model_str, sizeof(model_str)-1);
-                util_replace_chars(model_str, NULL);
+                udev_replace_chars(model_str, NULL);
         }
 
         if (revision_str[0] == '\0') {
@@ -399,7 +399,7 @@ fallback:
 
                 if (sd_device_get_sysattr_value(dev_usb, "bcdDevice", &usb_rev) >= 0) {
                         udev_replace_whitespace(usb_rev, revision_str, sizeof(revision_str)-1);
-                        util_replace_chars(revision_str, NULL);
+                        udev_replace_chars(revision_str, NULL);
                 }
         }
 
@@ -418,7 +418,7 @@ fallback:
 
                         if (usb_serial) {
                                 udev_replace_whitespace(usb_serial, serial_str, sizeof(serial_str)-1);
-                                util_replace_chars(serial_str, NULL);
+                                udev_replace_chars(serial_str, NULL);
                         }
                 }
         }
index bc12e4df796a918844ff69bae6ff203c86e1f691..f5831ed28d0d4b629c1843e7d097eea3e6903ed8 100644 (file)
@@ -364,7 +364,7 @@ static ssize_t udev_event_subst_format(
                 if (val != vbuf)
                         strscpy(vbuf, sizeof(vbuf), val);
                 delete_trailing_chars(vbuf, NULL);
-                count = util_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT);
+                count = udev_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT);
                 if (count > 0)
                         log_device_debug(dev, "%i character(s) replaced", count);
                 l = strpcpy(&s, l, vbuf);
index 27bf8f9372bc6c80ffafe8b1222a9e76515f0b33..ecbe957b4f6affdeb7ea5ed4f8d1cb0a1e95ce5b 100644 (file)
@@ -16,6 +16,7 @@
 
 #define READ_END  0
 #define WRITE_END 1
+#define UDEV_ALLOWED_CHARS_INPUT        "/ $%?,"
 
 typedef struct UdevEvent {
         sd_device *dev;
index 48fd33fdedd22b3b2a4fffde60f5acf147364097..7bfc25fdb5ff154c1cc715c6ed50d9becf225ed4 100644 (file)
@@ -1684,7 +1684,7 @@ static int udev_rule_apply_token_to_event(
                 }
 
                 delete_trailing_chars(result, "\n");
-                count = util_replace_chars(result, UDEV_ALLOWED_CHARS_INPUT);
+                count = udev_replace_chars(result, UDEV_ALLOWED_CHARS_INPUT);
                 if (count > 0)
                         log_rule_debug(dev, rules, "Replaced %zu character(s) in result of \"%s\"",
                                        count, buf);
@@ -2048,7 +2048,7 @@ static int udev_rule_apply_token_to_event(
 
                 (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
                 if (IN_SET(event->esc, ESCAPE_UNSET, ESCAPE_REPLACE)) {
-                        count = util_replace_chars(buf, "/");
+                        count = udev_replace_chars(buf, "/");
                         if (count > 0)
                                 log_rule_debug(dev, rules, "Replaced %zu character(s) from result of NAME=\"%s\"",
                                                count, token->value);
@@ -2082,9 +2082,9 @@ static int udev_rule_apply_token_to_event(
                 /* allow multiple symlinks separated by spaces */
                 (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), event->esc != ESCAPE_NONE);
                 if (event->esc == ESCAPE_UNSET)
-                        count = util_replace_chars(buf, "/ ");
+                        count = udev_replace_chars(buf, "/ ");
                 else if (event->esc == ESCAPE_REPLACE)
-                        count = util_replace_chars(buf, "/");
+                        count = udev_replace_chars(buf, "/");
                 else
                         count = 0;
                 if (count > 0)