1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-02-05 21:48:33 +00:00

c++ify linux.cc:is_disk()

This commit is contained in:
Pavel Labath 2011-10-02 14:43:44 +02:00
parent 0493ba853c
commit ec2398ff18
3 changed files with 9 additions and 47 deletions

View File

@ -3136,8 +3136,6 @@ int main(int argc, char **argv)
return EXIT_FAILURE; return EXIT_FAILURE;
} }
disk_cleanup();
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
kvm_close(kd); kvm_close(kd);
#endif #endif

View File

@ -63,7 +63,6 @@ struct diskio_stat {
extern struct diskio_stat stats; extern struct diskio_stat stats;
struct diskio_stat *prepare_diskio_stat(const char *); struct diskio_stat *prepare_diskio_stat(const char *);
void disk_cleanup(void);
int update_diskio(void); int update_diskio(void);
void clear_diskio_stats(void); void clear_diskio_stats(void);
void update_diskio_values(struct diskio_stat *, unsigned int, unsigned int); void update_diskio_values(struct diskio_stat *, unsigned int, unsigned int);

View File

@ -47,6 +47,7 @@
#include <unistd.h> #include <unistd.h>
// #include <assert.h> // #include <assert.h>
#include <time.h> #include <time.h>
#include <unordered_map>
#include "setting.hh" #include "setting.hh"
#include "top.h" #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 "); snprintf(p, p_max_size, (state > 0) ? "frozen" : "free ");
} }
typedef struct DEV_LIST_TYPE std::unordered_map<std::string, bool> dev_list;
{
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;
}
/* Same as sf #2942117 but memoized using a linked list */ /* Same as sf #2942117 but memoized using a linked list */
int is_disk(char *dev) int is_disk(char *dev)
{ {
char syspath[PATH_MAX]; std::string orig(dev);
std::string syspath("/sys/block/");
char *slash; char *slash;
DEV_LIST_PTR dev_cur, dev_last;
dev_cur = dev_head; auto i = dev_list.find(orig);
if(i != dev_list.end())
while (dev_cur) { return i->second;
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;
while ((slash = strchr(dev, '/'))) while ((slash = strchr(dev, '/')))
*slash = '!'; *slash = '!';
snprintf(syspath, sizeof(syspath), "/sys/block/%s", dev); syspath += dev;
dev_cur->memoized = !(access(syspath, F_OK));
if (dev_head) return dev_list[orig] = !(access(syspath.c_str(), F_OK));
dev_last->next = dev_cur;
else
dev_head = dev_cur;
return dev_cur->memoized;
} }
int update_diskio(void) int update_diskio(void)