summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-02-12 22:51:44 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:32:27 -0700
commit00866ed2a1f755eb027c84827fed1ed77364d436 (patch)
treeb7687cfc1abe2ee483a0e8033f7f05f9f551b97d
parentba053b91e145d7bb88bbd34856f6a6a86e3e718b (diff)
[PATCH] udev - keep private data out of the database?
Shouldn't we keep the temporary strings out of the database, or is this information useful for something? It cuts the length of the data from 628 to 275 bytes.
-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;
}