From 628ffd73bcff0c9f3bc5a8eeb2c7455fe9d28a51 Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Mon, 1 Sep 2008 17:11:26 +0200 Subject: device: make device_register() clone the device This is expected by the callers, but this fact was hidden well within the old list implementation. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD --- common/devices.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'common') diff --git a/common/devices.c b/common/devices.c index 2977436..8beebe2 100644 --- a/common/devices.c +++ b/common/devices.c @@ -130,10 +130,32 @@ device_t* device_get_by_name(char* name) return NULL; } +device_t* device_clone(device_t *dev) +{ + device_t *_dev; + + if(!dev) + return NULL; + + _dev = calloc(1, sizeof(device_t)); + + if(!_dev) + return NULL; + + memcpy(_dev, dev, sizeof(device_t)); + strncpy(_dev->name, dev->name, 16); + + return _dev; +} int device_register (device_t * dev) { - list_add(&(dev->list), &(devs.list)); + device_t *_dev; + + _dev = device_clone(dev); + if(!_dev) + return -1; + list_add(&(_dev->list), &(devs.list)); return 0; } -- cgit v1.1