]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/device-nodes.c
2 This file is part of systemd.
4 Copyright 2008-2011 Kay Sievers
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 #include "device-nodes.h"
27 int whitelisted_char_for_devnode(char c
, const char *white
) {
29 if ((c
>= '0' && c
<= '9') ||
30 (c
>= 'A' && c
<= 'Z') ||
31 (c
>= 'a' && c
<= 'z') ||
32 strchr("#+-.:=@_", c
) != NULL
||
33 (white
!= NULL
&& strchr(white
, c
) != NULL
))
39 int encode_devnode_name(const char *str
, char *str_enc
, size_t len
) {
42 if (str
== NULL
|| str_enc
== NULL
)
45 for (i
= 0, j
= 0; str
[i
] != '\0'; i
++) {
48 seqlen
= utf8_encoded_valid_unichar(&str
[i
]);
51 if (len
-j
< (size_t)seqlen
)
54 memcpy(&str_enc
[j
], &str
[i
], seqlen
);
58 } else if (str
[i
] == '\\' || !whitelisted_char_for_devnode(str
[i
], NULL
)) {
63 sprintf(&str_enc
[j
], "\\x%02x", (unsigned char) str
[i
]);