diff -Nuar /udev/libsysfs/libsysfs.h libsysfs/libsysfs.h --- /udev/libsysfs/libsysfs.h 2003-07-19 03:06:48.000000000 +0800 +++ libsysfs/libsysfs.h 2003-08-05 11:01:29.183292832 +0800 @@ -124,6 +124,9 @@ extern int sysfs_read_attribute(struct sysfs_attribute *sysattr); extern int sysfs_read_attribute_value(const char *attrpath, char *value, size_t vsize); +extern int sysfs_write_attribute(struct sysfs_attribute *sysattr,char *value); +extern int sysfs_write_attribute_value(const char *attrpath, char *value); + extern char *sysfs_get_value_from_attributes(struct sysfs_attribute *attr, const char * name); extern void sysfs_close_directory(struct sysfs_directory *sysdir); diff -Nuar /udev/libsysfs/sysfs_dir.c libsysfs/sysfs_dir.c --- /udev/libsysfs/sysfs_dir.c 2003-07-19 03:06:34.000000000 +0800 +++ libsysfs/sysfs_dir.c 2003-08-05 11:18:44.580888472 +0800 @@ -78,6 +78,34 @@ return sysattr; } +/** + * sysfs_write_attribute: write value to the attribute + * @sysattr: attribute to write + * returns 0 with success and -1 with error. + */ +int sysfs_write_attribute(struct sysfs_attribute *sysattr,char *value) +{ + if (sysattr == NULL) { + errno = EINVAL; + return -1; + } + + if (!(sysattr->method & SYSFS_METHOD_STORE)) { + dprintf (stderr, "Store method not supported for attribute %s\n", + sysattr->path); + return -1; + } + + if (!value) + sysattr->value=value; + else + { + dprintf (stderr, "The value is NULL\n"); + return -1; + } + return 0; +} + /** * sysfs_read_attribute: reads value from attribute @@ -134,6 +162,41 @@ } /** + * sysfs_write_attribute_value: given path to attribute, + * value will be saved to the attribute. + * @attrpath: sysfs path to attribute + * @value: value to give to attribute + * returns 0 with success and -1 with error. + */ +int sysfs_write_attribute_value(const char *attrpath, char *value) +{ + struct sysfs_attribute *attr = NULL; + + if (attrpath == NULL || value == NULL) { + errno = EINVAL; + return -1; + } + + attr = sysfs_open_attribute(attrpath); + if (attr == NULL) { + dprintf(stderr, "Invalid attribute path %s\n", attrpath); + errno = EINVAL; + return -1; + } + + if((sysfs_write_attribute(attr,value)) != 0 ) { + dprintf(stderr, "Error write to attribute %s\n", attrpath); + sysfs_close_attribute(attr); + return -1; + } + + sysfs_close_attribute(attr); + + return 0; +} + + +/** * sysfs_read_attribute_value: given path to attribute, return its value. * values can be up to a pagesize, if buffer is smaller the value will * be truncated.