diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2005-12-18 13:37:50 +0100 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2005-12-18 13:37:50 +0100 |
commit | ff98d8b9f231b35d5060905048f929b2fcfa099d (patch) | |
tree | dd63c6ad15709d0fc7f3f786b80f12f8a651c755 | |
parent | e73edce642ebf34ea4c7630acc54216af316dde8 (diff) | |
download | pcmciautils-ff98d8b9f231b35d5060905048f929b2fcfa099d.tar.gz |
[PATCH] pccardctl: do not use deprecated sysfs_read_attribute_value()
sysfs_read_attribute_value() is no longer available in libsysfs-2.0.0,
therefore re-structure the code to use sysfs_read_attribute().
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
-rw-r--r-- | src/pccardctl.c | 86 |
1 files changed, 39 insertions, 47 deletions
diff --git a/src/pccardctl.c b/src/pccardctl.c index 399f076..adba8c9 100644 --- a/src/pccardctl.c +++ b/src/pccardctl.c @@ -91,73 +91,66 @@ static int pccardctl_socket_exists(unsigned long socket_no) return (!(sysfs_path_is_file(file))); } -static char * pccardctl_get_string_socket(unsigned long socket_no, const char *in_file) +static char * read_out_file(char * file) { - int ret, len; - char value[SYSFS_PATH_MAX]; - char file[SYSFS_PATH_MAX]; - char *result; - - snprintf(file, SYSFS_PATH_MAX, "/sys/class/pcmcia_socket/pcmcia_socket%lu/%s", - socket_no, in_file); - ret = sysfs_read_attribute_value(file, value, SYSFS_PATH_MAX); - if (ret) - return NULL; + struct sysfs_attribute *attr = sysfs_open_attribute(file); + int ret; + char *result = NULL; - len = strlen(value); - if (len < 2) + if (!attr) return NULL; + ret = sysfs_read_attribute(attr); - result = malloc(sizeof(char) * len); - if (!result) - return NULL; + if (ret || !attr->value || !attr->len || (attr->len > SYSFS_PATH_MAX)) + goto close_out; - strncpy(result, value, len); - result[len - 1] = '\0'; + result = malloc(attr->len + 1); + if (result) { + memcpy(result, attr->value, attr->len); + result[attr->len] = '\0'; + if (result[attr->len - 1] == '\n') + result[attr->len - 1] = '\0'; + } - return (result); + close_out: + sysfs_close_attribute(attr); + return result; } -static char * pccardctl_get_string(unsigned long socket_no, const char *in_file) +static inline char * pccardctl_get_string_socket(unsigned long socket_no, const char *in_file) { - int ret, len; - char value[SYSFS_PATH_MAX]; char file[SYSFS_PATH_MAX]; - char *result; - snprintf(file, SYSFS_PATH_MAX, "/sys/bus/pcmcia/devices/%lu.0/%s", + snprintf(file, SYSFS_PATH_MAX, "/sys/class/pcmcia_socket/pcmcia_socket%lu/%s", socket_no, in_file); - ret = sysfs_read_attribute_value(file, value, SYSFS_PATH_MAX); - if (ret) - return NULL; - len = strlen(value); - if (len < 2) - return NULL; + return read_out_file(file); +} - result = malloc(sizeof(char) * len); - if (!result) - return NULL; +static inline char * pccardctl_get_string(unsigned long socket_no, const char *in_file) +{ + char file[SYSFS_PATH_MAX]; - strncpy(result, value, len); - result[len - 1] = '\0'; + snprintf(file, SYSFS_PATH_MAX, "/sys/bus/pcmcia/devices/%lu.0/%s", + socket_no, in_file); - return (result); + return read_out_file(file); } -static int pccardctl_get_one_f(unsigned long socket_no, unsigned int dev, const char *in_file, unsigned int *result) +static inline int pccardctl_get_one_f(unsigned long socket_no, unsigned int dev, const char *in_file, unsigned int *result) { - int ret; - char value[SYSFS_PATH_MAX]; + char *value; char file[SYSFS_PATH_MAX]; snprintf(file, SYSFS_PATH_MAX, "/sys/bus/pcmcia/devices/%lu.%u/%s", socket_no, dev, in_file); - ret = sysfs_read_attribute_value(file, value, SYSFS_PATH_MAX); - if (!ret) - sscanf(value, "0x%X", result); + value = read_out_file(file); + if (!value) + return -EINVAL; - return (ret); + if (sscanf(value, "0x%X", result) != 1) + return -EIO; + return 0; } static int pccardctl_get_one(unsigned long socket_no, const char *in_file, unsigned int *result) @@ -167,14 +160,13 @@ static int pccardctl_get_one(unsigned long socket_no, const char *in_file, unsig static int pccardctl_get_power(unsigned long socket_no, unsigned int func) { - int ret; - char value[SYSFS_PATH_MAX]; + char * value; char file[SYSFS_PATH_MAX]; snprintf(file, SYSFS_PATH_MAX, "/sys/bus/pcmcia/devices/%lu.%u/power/state", socket_no, func); - ret = sysfs_read_attribute_value(file, value, SYSFS_PATH_MAX); - if (!ret) { + value = read_out_file(file); + if (value) { if (strncmp(value, "0", 1)) return 3; return 0; |