]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/device-nodes.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
7 #include "device-nodes.h"
10 int allow_listed_char_for_devnode(char c
, const char *white
) {
12 if ((c
>= '0' && c
<= '9') ||
13 (c
>= 'A' && c
<= 'Z') ||
14 (c
>= 'a' && c
<= 'z') ||
15 strchr("#+-.:=@_", c
) != NULL
||
16 (white
!= NULL
&& strchr(white
, c
) != NULL
))
22 int encode_devnode_name(const char *str
, char *str_enc
, size_t len
) {
28 for (i
= 0, j
= 0; str
[i
] != '\0'; i
++) {
31 seqlen
= utf8_encoded_valid_unichar(str
+ i
, SIZE_MAX
);
34 if (len
-j
< (size_t)seqlen
)
37 memcpy(&str_enc
[j
], &str
[i
], seqlen
);
41 } else if (str
[i
] == '\\' || !allow_listed_char_for_devnode(str
[i
], NULL
)) {
46 sprintf(&str_enc
[j
], "\\x%02x", (unsigned char) str
[i
]);