X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fgeneral.c;h=f299a2b807ea8e0772a88bf016c8c06c15eaaf70;hb=eee4ace092c21a82230c21afcff4d17a3f497b52;hp=62d242db6fa387c5bb7f9feb81a61298a865065d;hpb=230f3167b70b5d73b3d9c0c650c9a654c06ccb51;p=i3%2Fi3status diff --git a/src/general.c b/src/general.c index 62d242d..f299a2b 100644 --- a/src/general.c +++ b/src/general.c @@ -1,4 +1,4 @@ -// vim:ts=8:expandtab +// vim:ts=4:sw=4:expandtab #include #include #include @@ -6,6 +6,7 @@ #include #include #include +#include #include "i3status.h" @@ -13,14 +14,19 @@ * Reads size bytes into the destination buffer from filename. * */ -void slurp(char *filename, char *destination, int size) { - int fd; +bool slurp(const char *filename, char *destination, int size) { + int fd; - if ((fd = open(filename, O_RDONLY)) == -1) - die("Could not open \"%s\"\n", filename); + if ((fd = open(filename, O_RDONLY)) == -1) + return false; - (void)read(fd, destination, size); - (void)close(fd); + /* We need one byte for the trailing 0 byte */ + int n = read(fd, destination, size - 1); + if (n != -1) + destination[n] = '\0'; + (void)close(fd); + + return true; } /* @@ -29,15 +35,15 @@ void slurp(char *filename, char *destination, int size) { * */ char *skip_character(char *input, char character, int amount) { - char *walk; - size_t len = strlen(input); - int blanks = 0; + char *walk; + size_t len = strlen(input); + int blanks = 0; - for (walk = input; ((size_t)(walk - input) < len) && (blanks < amount); walk++) - if (*walk == character) - blanks++; + for (walk = input; ((size_t)(walk - input) < len) && (blanks < amount); walk++) + if (*walk == character) + blanks++; - return (walk == input ? walk : walk-1); + return (walk == input ? walk : walk - 1); } /* @@ -45,27 +51,12 @@ char *skip_character(char *input, char character, int amount) { * */ void die(const char *fmt, ...) { - char buffer[512]; - va_list ap; - va_start(ap, fmt); - (void)vsnprintf(buffer, sizeof(buffer), fmt, ap); - va_end(ap); - - if (wmii_path != NULL) - write_error_to_statusbar(buffer); - else - fprintf(stderr, "%s", buffer); - exit(EXIT_FAILURE); -} - -/* - * This function just concats two strings in place, it should only be used - * for concatting order to the name of a file or concatting color codes. - * Otherwise, the buffer size would have to be increased. - * - */ -char *order_to_str(int number, char *name) { - static char buf[32]; - (void)snprintf(buf, sizeof(buf), "%d%s", number, name); - return buf; + char buffer[512]; + va_list ap; + va_start(ap, fmt); + (void)vsnprintf(buffer, sizeof(buffer), fmt, ap); + va_end(ap); + + fprintf(stderr, "%s", buffer); + exit(EXIT_FAILURE); }