X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibudev%2Flibudev-util.c;h=d9cdde1751483e8dbad65a5b10b129ba40991836;hb=5e273efec5fcf60ddb55e6bc0aaa850cb1be86c6;hp=d54430cad09b80ee8d1d2576d495fe170786c37f;hpb=02a36bc9a1769c744f141f127898dbe076dbfd96;p=elogind.git diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c index d54430cad..d9cdde175 100644 --- a/src/libudev/libudev-util.c +++ b/src/libudev/libudev-util.c @@ -32,9 +32,11 @@ #include #include +#include "device-nodes.h" #include "libudev.h" #include "libudev-private.h" #include "utf8.h" +#include "MurmurHash2.h" /** * SECTION:libudev-util @@ -201,6 +203,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string, udev_device_unref(dev); return 0; } + ssize_t util_get_sys_core_link_value(struct udev *udev, const char *slink, const char *syspath, char *value, size_t size) { char path[UTIL_PATH_SIZE]; @@ -344,7 +347,7 @@ int util_replace_chars(char *str, const char *white) while (str[i] != '\0') { int len; - if (is_utf8_encoding_whitelisted(str[i], white)) { + if (whitelisted_char_for_devnode(str[i], white)) { i++; continue; } @@ -392,67 +395,12 @@ int util_replace_chars(char *str, const char *white) **/ _public_ int udev_util_encode_string(const char *str, char *str_enc, size_t len) { - return udev_encode_string(str, str_enc, len); -} - -/* - * http://sites.google.com/site/murmurhash/ - * - * All code is released to the public domain. For business purposes, - * Murmurhash is under the MIT license. - * - */ -static unsigned int murmur_hash2(const char *key, size_t len, unsigned int seed) -{ - /* - * 'm' and 'r' are mixing constants generated offline. - * They're not really 'magic', they just happen to work well. - */ - const unsigned int m = 0x5bd1e995; - const int r = 24; - - /* initialize the hash to a 'random' value */ - unsigned int h = seed ^ len; - - /* mix 4 bytes at a time into the hash */ - const unsigned char * data = (const unsigned char *)key; - - while(len >= sizeof(unsigned int)) { - unsigned int k; - - memcpy(&k, data, sizeof(k)); - k *= m; - k ^= k >> r; - k *= m; - h *= m; - h ^= k; - - data += sizeof(k); - len -= sizeof(k); - } - - /* handle the last few bytes of the input array */ - switch(len) { - case 3: - h ^= data[2] << 16; - case 2: - h ^= data[1] << 8; - case 1: - h ^= data[0]; - h *= m; - }; - - /* do a few final mixes of the hash to ensure the last few bytes are well-incorporated */ - h ^= h >> 13; - h *= m; - h ^= h >> 15; - - return h; + return encode_devnode_name(str, str_enc, len); } unsigned int util_string_hash32(const char *str) { - return murmur_hash2(str, strlen(str), 0); + return MurmurHash2(str, strlen(str), 0); } /* get a bunch of bit numbers out of the hash, and set the bits in our bit field */ @@ -470,7 +418,7 @@ uint64_t util_string_bloom64(const char *str) ssize_t print_kmsg(const char *fmt, ...) { - int fd; + _cleanup_close_ int fd = -1; va_list ap; char text[1024]; ssize_t len; @@ -488,7 +436,7 @@ ssize_t print_kmsg(const char *fmt, ...) ret = write(fd, text, len); if (ret < 0) - ret = -errno; - close(fd); + return -errno; + return ret; }