summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--udev.h14
-rw-r--r--udevdb.c7
2 files changed, 13 insertions, 8 deletions
diff --git a/udev.h b/udev.h
index 00f1361016..e615b4c8bb 100644
--- a/udev.h
+++ b/udev.h
@@ -24,6 +24,7 @@
#define UDEV_H
#include "libsysfs/libsysfs.h"
+#include <stddef.h>
#include <sys/param.h>
#define COMMENT_CHARACTER '#'
@@ -33,6 +34,9 @@
#define GROUP_SIZE 30
#define MODE_SIZE 8
+/* length of public data */
+#define UDEVICE_LEN (offsetof(struct udevice, bus_id))
+
struct udevice {
char name[NAME_SIZE];
char owner[OWNER_SIZE];
@@ -43,11 +47,11 @@ struct udevice {
unsigned int mode; /* not mode_t due to conflicting definitions in different libcs */
char symlink[NAME_SIZE];
- /* fields that help us in building strings */
- unsigned char bus_id[SYSFS_NAME_LEN];
- unsigned char program_result[NAME_SIZE];
- unsigned char kernel_number[NAME_SIZE];
- unsigned char kernel_name[NAME_SIZE];
+ /* private data that help us in building strings */
+ char bus_id[SYSFS_NAME_LEN];
+ char program_result[NAME_SIZE];
+ char kernel_number[NAME_SIZE];
+ char kernel_name[NAME_SIZE];
};
#define strfieldcpy(to, from) \
diff --git a/udevdb.c b/udevdb.c
index c4e064fc11..e657fedcb2 100644
--- a/udevdb.c
+++ b/udevdb.c
@@ -58,8 +58,8 @@ int udevdb_add_dev(const char *path, const struct udevice *dev)
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;
}