X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevdb.c;h=a1f79a7c65b016b39bc0b0b295d8ef107252ecdd;hb=97853b4f40708d2fdcde3da7e78138c683d9d66b;hp=c4e064fc115d4414ef21cbbbc44403ed4570e7bc;hpb=b2a21a35476b4780ef1fc68c60216117ab66fa2b;p=elogind.git diff --git a/udevdb.c b/udevdb.c index c4e064fc1..a1f79a7c6 100644 --- a/udevdb.c +++ b/udevdb.c @@ -33,13 +33,13 @@ #include #include +#include "libsysfs/sysfs/libsysfs.h" #include "udev_version.h" #include "udev.h" #include "logging.h" #include "namedev.h" #include "udevdb.h" #include "tdb/tdb.h" -#include "libsysfs/libsysfs.h" static TDB_CONTEXT *udevdb; @@ -53,13 +53,13 @@ int udevdb_add_dev(const char *path, const struct udevice *dev) return -ENODEV; memset(keystr, 0, NAME_SIZE); - strcpy(keystr, path); + strfieldcpy(keystr, path); key.dptr = keystr; key.dsize = strlen(keystr) + 1; data.dptr = (void *)dev; - data.dsize = sizeof(*dev); - + data.dsize = UDEVICE_LEN; + return tdb_store(udevdb, key, data, TDB_REPLACE); } @@ -77,7 +77,8 @@ int udevdb_get_dev(const char *path, struct udevice *dev) if (data.dptr == NULL || data.dsize == 0) return -ENODEV; - memcpy(dev, data.dptr, sizeof(*dev)); + memset(dev, 0, sizeof(struct udevice)); + memcpy(dev, data.dptr, UDEVICE_LEN); return 0; } @@ -90,7 +91,7 @@ int udevdb_delete_dev(const char *path) return -EINVAL; memset(keystr, 0, sizeof(keystr)); - strcpy(keystr, path); + strfieldcpy(keystr, path); key.dptr = keystr; key.dsize = strlen(keystr) + 1; @@ -179,7 +180,7 @@ static int find_device_by_name(char *path, struct udevice *dev) { if (strncmp(dev->name, find_name, sizeof(dev->name)) == 0) { memcpy(find_dev, dev, sizeof(*find_dev)); - strncpy(find_path, path, NAME_SIZE); + strfieldcpy(find_path, path); find_found = 1; /* stop search */ return 1;