X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=panel-plugin%2Fhdaps.c;h=cb5e459c7f20b672e8dabac9d63329bf2454ad27;hb=5493854dff828914aeb6d60b8fe10ac170820737;hp=de1476f3199076e0e1791b26ad5c77ffc5f0dc94;hpb=63eef27ea56fc385cf1eb7af33211e697b384c3e;p=xfce4-hdaps.git diff --git a/panel-plugin/hdaps.c b/panel-plugin/hdaps.c index de1476f..cb5e459 100644 --- a/panel-plugin/hdaps.c +++ b/panel-plugin/hdaps.c @@ -1,3 +1,23 @@ +/* + * xfce4-hdaps, an XFCE4 panel plugin for the HDAPS system. + * + * Copyright Michael Orlitzky + * + * http://michael.orlitzky.com/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * http://www.fsf.org/licensing/licenses/gpl.html + */ + #ifdef HAVE_CONFIG_H #include #endif @@ -20,6 +40,7 @@ #define SYSFS_BLOCK_DEVICE_DIR "/sys/block/" + static int hdaps_device_exists(const char* device) { /* Determine whether or not a device (file) exists and has an unload_heads entry in sysfs. */ @@ -29,7 +50,13 @@ static int hdaps_device_exists(const char* device) { } + int get_hdaps_device_list(char list[MAX_HDAPS_DEVICES][FILENAME_MAX]) { + /* Gets a list of devices which support HDAPS. + * We start by getting every device in the sysfs + * block device directory, and then eliminate those + * which don't have an unload_heads entry. + */ int list_idx = 0; DIR *dp; struct dirent *ep; @@ -52,38 +79,46 @@ int get_hdaps_device_list(char list[MAX_HDAPS_DEVICES][FILENAME_MAX]) { } + int slurp_file(const char* filename, char* buf, int max_bytes) { /* This function just reads the contents of filename - * into buf. It is slightly stolen from the hdapsd project. - */ - - /* Return an error value by default. */ - int ret = HDAPS_ERROR; - int fd = open(filename, O_RDONLY); - + * into buf, and returns the number of bytes read. + */ if (filename == NULL || buf == NULL) { - return ret; + /* HDAPS_SUPER_BAD_ERROR */ + return HDAPS_ERROR; } - + + + /* Return an error value by default. */ + int bytes_read = HDAPS_ERROR; + + int fd = open(filename, O_RDONLY); + if (fd < 0) { + /* open() didn't work. Report the error, and bail. */ fprintf(stderr, "open(%s): %s\n", filename, strerror(errno)); - return fd; + return HDAPS_ERROR; } - ret = read(fd, buf, max_bytes-1); + bytes_read = read(fd, buf, max_bytes-1); - if (ret < 0) { + if (bytes_read < 0) { + /* Why did we read fewer than 0 bytes? */ fprintf(stderr, "read(%s): %s\n", filename, strerror(errno)); } else { - buf[ret] = 0; /* Null-terminate buf. */ + /* Null-terminate buf if read() worked. */ + buf[bytes_read] = 0; } + if (close(fd)) { - fprintf(stderr, "close(%s): %s\n", filename, strerror(errno)); + /* Oh hey we should be able to close the file, too. */ + fprintf(stderr, "close(%s): %s\n", filename, strerror(errno)); } - return ret; + return bytes_read; } @@ -94,15 +129,18 @@ int parse_int_from_file(const char* filename) { to contain an integer (although in string form). */ char buf[MAX_FILE_CONTENTS_SIZE]; - int ret = slurp_file(filename, buf, sizeof(buf)); - - if (ret < 0) { - /* Why did we read fewer than 0 bytes? */ - return ret; + int bytes_read = slurp_file(filename, buf, sizeof(buf)); + + if (bytes_read <= 0) { + /* We can't parse what doesn't exist. Note that + * reading "0" from a file should result in reading + * at least 1 byte. + */ + return HDAPS_ERROR; } else { /* If we read more than 0 bytes, hopefully we can - count on atoi to succeed. */ + * count on atoi to succeed. */ return atoi(buf); } }