chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rule-generator: net - whitelist NICs that violate MAC local scheme
[elogind.git]
/
udev
/
lib
/
libudev-util.c
diff --git
a/udev/lib/libudev-util.c
b/udev/lib/libudev-util.c
index b628fdd44c33a35eea72535b029838c19f0ee76d..2b8cda59f6e30cb41b2d6c6bfee3732f5051fe45 100644
(file)
--- a/
udev/lib/libudev-util.c
+++ b/
udev/lib/libudev-util.c
@@
-101,12
+101,12
@@
int util_log_priority(const char *priority)
return 0;
}
return 0;
}
-size_t util_path_encode(char *s, size_t
len
)
+size_t util_path_encode(char *s, size_t
size
)
{
{
- char t[(
len * 3
)+1];
+ char t[(
size * 4
)+1];
size_t i, j;
size_t i, j;
- for (i = 0, j = 0; s[i] != '\0'; i++) {
+ for (i = 0, j = 0; s[i] != '\0'
&& i < size
; i++) {
if (s[i] == '/') {
memcpy(&t[j], "\\x2f", 4);
j += 4;
if (s[i] == '/') {
memcpy(&t[j], "\\x2f", 4);
j += 4;
@@
-118,11
+118,12
@@
size_t util_path_encode(char *s, size_t len)
j++;
}
}
j++;
}
}
- if (len == 0)
- return j;
- i = (j < len - 1) ? j : len - 1;
- memcpy(s, t, i);
- s[i] = '\0';
+ if (i >= size)
+ return 0;
+ if (j >= size)
+ return 0;
+ memcpy(s, t, j);
+ s[j] = '\0';
return j;
}
return j;
}
@@
-134,7
+135,7
@@
size_t util_path_decode(char *s)
if (memcmp(&s[i], "\\x2f", 4) == 0) {
s[j] = '/';
i += 4;
if (memcmp(&s[i], "\\x2f", 4) == 0) {
s[j] = '/';
i += 4;
- }else if (memcmp(&s[i], "\\x5c", 4) == 0) {
+ }
else if (memcmp(&s[i], "\\x5c", 4) == 0) {
s[j] = '\\';
i += 4;
} else {
s[j] = '\\';
i += 4;
} else {
@@
-460,3
+461,16
@@
void util_set_fd_cloexec(int fd)
flags |= FD_CLOEXEC;
fcntl(fd, F_SETFD, flags);
}
flags |= FD_CLOEXEC;
fcntl(fd, F_SETFD, flags);
}
+
+unsigned int util_string_hash32(const char *str)
+{
+ unsigned int hash = 0;
+
+ while (str[0] != '\0') {
+ hash += str[0] << 4;
+ hash += str[0] >> 4;
+ hash *= 11;
+ str++;
+ }
+ return hash;
+}