summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2005-12-18 13:37:50 +0100
committerDominik Brodowski <linux@dominikbrodowski.net>2005-12-18 13:37:50 +0100
commitff98d8b9f231b35d5060905048f929b2fcfa099d (patch)
treedd63c6ad15709d0fc7f3f786b80f12f8a651c755
parente73edce642ebf34ea4c7630acc54216af316dde8 (diff)
downloadpcmciautils-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.c86
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;