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:
committed by
Wolfgang Denk
parent
e99e9575bb
commit
628ffd73bc
@@ -130,10 +130,32 @@ device_t* device_get_by_name(char* name)
|
|||||||
return NULL;
|
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)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ int devices_init (void);
|
|||||||
int device_deregister(char *devname);
|
int device_deregister(char *devname);
|
||||||
struct list_head* device_get_list(void);
|
struct list_head* device_get_list(void);
|
||||||
device_t* device_get_by_name(char* name);
|
device_t* device_get_by_name(char* name);
|
||||||
|
device_t* device_clone(device_t *dev);
|
||||||
|
|
||||||
#ifdef CONFIG_LCD
|
#ifdef CONFIG_LCD
|
||||||
int drv_lcd_init (void);
|
int drv_lcd_init (void);
|
||||||
|
|||||||
Reference in New Issue
Block a user