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 <plagnioj@jcrosoft.com>
This commit is contained in:
parent
e99e9575bb
commit
628ffd73bc
@ -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;
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,7 @@ int devices_init (void);
|
||||
int device_deregister(char *devname);
|
||||
struct list_head* device_get_list(void);
|
||||
device_t* device_get_by_name(char* name);
|
||||
device_t* device_clone(device_t *dev);
|
||||
|
||||
#ifdef CONFIG_LCD
|
||||
int drv_lcd_init (void);
|
||||
|
Loading…
Reference in New Issue
Block a user