From ec2398ff1842100499cd62efff525e1b93455410 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Sun, 2 Oct 2011 14:43:44 +0200 Subject: [PATCH] c++ify linux.cc:is_disk() --- src/conky.cc | 2 -- src/diskio.h | 1 - src/linux.cc | 53 +++++++++------------------------------------------- 3 files changed, 9 insertions(+), 47 deletions(-) diff --git a/src/conky.cc b/src/conky.cc index e359a478..b94e9187 100644 --- a/src/conky.cc +++ b/src/conky.cc @@ -3136,8 +3136,6 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - disk_cleanup(); - #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) kvm_close(kd); #endif diff --git a/src/diskio.h b/src/diskio.h index 866b528f..15009214 100644 --- a/src/diskio.h +++ b/src/diskio.h @@ -63,7 +63,6 @@ struct diskio_stat { extern struct diskio_stat stats; struct diskio_stat *prepare_diskio_stat(const char *); -void disk_cleanup(void); int update_diskio(void); void clear_diskio_stats(void); void update_diskio_values(struct diskio_stat *, unsigned int, unsigned int); diff --git a/src/linux.cc b/src/linux.cc index 880405fe..bb996569 100644 --- a/src/linux.cc +++ b/src/linux.cc @@ -47,6 +47,7 @@ #include // #include #include +#include #include "setting.hh" #include "top.h" @@ -2375,60 +2376,24 @@ void print_disk_protect_queue(struct text_object *obj, char *p, int p_max_size) snprintf(p, p_max_size, (state > 0) ? "frozen" : "free "); } -typedef struct DEV_LIST_TYPE -{ - char *dev_name; - int memoized; - struct DEV_LIST_TYPE *next; - -} DEV_LIST, *DEV_LIST_PTR; - -DEV_LIST_PTR dev_head = NULL; - -void disk_cleanup() { - DEV_LIST_PTR dev_next, dev_cur = dev_head; - - while(dev_cur) { - dev_next = dev_cur->next; - free(dev_cur->dev_name); - free(dev_cur); - dev_cur = dev_next; - } - dev_head = NULL; -} +std::unordered_map dev_list; /* Same as sf #2942117 but memoized using a linked list */ int is_disk(char *dev) { - char syspath[PATH_MAX]; + std::string orig(dev); + std::string syspath("/sys/block/"); char *slash; - DEV_LIST_PTR dev_cur, dev_last; - dev_cur = dev_head; - - while (dev_cur) { - if (strcmp(dev_cur->dev_name, dev) == 0) - return dev_cur->memoized; - dev_last = dev_cur; - dev_cur = dev_cur->next; - } - - dev_cur = (DEV_LIST_PTR)malloc(sizeof(DEV_LIST)); - dev_cur->dev_name = (char *)malloc((strlen(dev)+1)*sizeof(char)); - strcpy(dev_cur->dev_name,dev); - dev_cur->next = NULL; + auto i = dev_list.find(orig); + if(i != dev_list.end()) + return i->second; while ((slash = strchr(dev, '/'))) *slash = '!'; - snprintf(syspath, sizeof(syspath), "/sys/block/%s", dev); - dev_cur->memoized = !(access(syspath, F_OK)); + syspath += dev; - if (dev_head) - dev_last->next = dev_cur; - else - dev_head = dev_cur; - - return dev_cur->memoized; + return dev_list[orig] = !(access(syspath.c_str(), F_OK)); } int update_diskio(void)