diff options
| -rw-r--r-- | common/devices.c | 24 | ||||
| -rw-r--r-- | include/devices.h | 1 | 
2 files changed, 24 insertions, 1 deletions
| diff --git a/common/devices.c b/common/devices.c index 297743642..8beebe255 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;  } diff --git a/include/devices.h b/include/devices.h index 490016b69..6b78d5888 100644 --- a/include/devices.h +++ b/include/devices.h @@ -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); |