Skip to content

Commit 2d8b5bb

Browse files
committed
More sorting out
1 parent 3b6a208 commit 2d8b5bb

File tree

7 files changed

+98
-104
lines changed

7 files changed

+98
-104
lines changed

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
add_executable(cfetch main.c fetchline.c proc.c)
1+
add_executable(cfetch main.c fetchline.c file.c fetch.c)

src/fetch.c

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#include "fetch.h"
2+
#include "file.h"
3+
#include <sys/utsname.h>
4+
#include <sys/sysinfo.h>
5+
#include <unistd.h>
6+
#include <stdio.h>
7+
#include <stdlib.h>
8+
#include <string.h>
9+
10+
#define SECONDS_MIN 60
11+
#define SECONDS_HOUR 3600
12+
#define SECONDS_DAY 86400
13+
14+
void fetch_kernel(char *buffer, size_t buffer_size) {
15+
struct utsname local_machine;
16+
uname(&local_machine);
17+
sprintf(buffer ,"%s %s %s", local_machine.sysname, local_machine.release, local_machine.machine );
18+
}
19+
20+
void fetch_hostname(char *buffer, size_t buffer_size) {
21+
gethostname(buffer, buffer_size);
22+
}
23+
24+
void fetch_uptime(char *buffer, size_t buffer_size) {
25+
struct sysinfo machine_info;
26+
sysinfo(&machine_info);
27+
28+
// TODO: Tweak logic so that words aren't always plural
29+
if (machine_info.uptime < SECONDS_MIN) {
30+
sprintf(buffer, "%ld seconds", machine_info.uptime);
31+
} else if (machine_info.uptime >= SECONDS_MIN && machine_info.uptime < SECONDS_HOUR) {
32+
long uptime_minutes = machine_info.uptime / SECONDS_MIN;
33+
long uptime_remaining_seconds = machine_info.uptime - uptime_minutes*SECONDS_MIN;
34+
sprintf(buffer, "%ld minutes, %ld seconds", uptime_minutes, uptime_remaining_seconds);
35+
} else if (machine_info.uptime >= SECONDS_HOUR && machine_info.uptime < SECONDS_DAY ) {
36+
long uptime_hours = machine_info.uptime / SECONDS_HOUR;
37+
long uptime_minutes = (machine_info.uptime - uptime_hours*SECONDS_HOUR)/SECONDS_MIN;
38+
long uptime_remaining_seconds = machine_info.uptime - uptime_hours*SECONDS_HOUR - uptime_minutes*SECONDS_MIN;
39+
sprintf(buffer, "%ld hours, %ld minutes, %ld seconds", uptime_hours, uptime_minutes, uptime_remaining_seconds);
40+
}
41+
else {
42+
long uptime_days = machine_info.uptime / SECONDS_DAY;
43+
long uptime_hours = (machine_info.uptime - uptime_days*SECONDS_DAY)/SECONDS_HOUR;
44+
long uptime_minutes = (machine_info.uptime - uptime_hours*SECONDS_HOUR - uptime_days*SECONDS_DAY)/SECONDS_MIN;
45+
long uptime_remaining_seconds = machine_info.uptime - uptime_minutes*SECONDS_MIN - uptime_hours*SECONDS_HOUR - uptime_days*SECONDS_DAY;
46+
sprintf(buffer, "%ld days, %ld hours, %ld minutes, %ld seconds", uptime_days, uptime_hours, uptime_minutes, uptime_remaining_seconds);
47+
}
48+
}
49+
50+
void fetch_cpumodel(char *buffer, size_t buffer_size) {
51+
FILE *cpuinfo = fopen("/proc/cpuinfo", "rb");
52+
procParse(cpuinfo, buffer, "model name");
53+
fclose(cpuinfo);
54+
}
55+
56+
void fetch_memory(char *buffer, size_t buffer_size) {
57+
FILE *meminfo = fopen("/proc/meminfo", "rb");
58+
// TODO: CHange these arbitrary values to something a little more known
59+
char memtotal[16]; procParse(meminfo, memtotal, "MemTotal");
60+
char memavail[16]; procParse(meminfo, memavail, "MemAvailable");
61+
unsigned long totalkB = strtoul(memtotal, NULL, 10);
62+
unsigned long availkB = strtoul(memavail, NULL, 10);
63+
64+
char memLine[strlen(memtotal) + strlen(memavail) + 3];
65+
sprintf(buffer, "%.2fGiB / %.2fGiB", (float)(totalkB - availkB) / 1024 / 1024, (float)totalkB / 1024 / 1024);
66+
fclose(meminfo);
67+
}
68+
69+
void fetch_model(char *buffer, size_t buffer_size) {
70+
FILE *model = fopen("/sys/devices/virtual/dmi/id/product_name", "rb");
71+
char *modelname = readFirstline(model);
72+
strcpy(buffer, modelname);
73+
free(modelname);
74+
fclose(model);
75+
}

src/fetch.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <stdlib.h>
2+
void fetch_kernel(char *buffer, size_t buffer_size);
3+
void fetch_hostname(char *buffer, size_t buffer_size);
4+
void fetch_uptime(char *buffer, size_t buffer_size);
5+
void fetch_cpumodel(char *buffer, size_t buffer_size);
6+
void fetch_memory(char *buffer, size_t buffer_size);
7+
void fetch_model(char *buffer, size_t buffer_size);
8+

src/fetchline.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
typedef struct fetchlist {
1010
char icon[ICON_MAX];
1111
char title[TITLE_MAX];
12-
void (*fetchfunc)(char *buffer);
12+
void (*fetchfunc)(char *, size_t);
1313
} fetchlist;
1414

1515
void align_fetchlist(fetchlist *fetcharray, size_t count);

src/proc.c renamed to src/file.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "proc.h"
1+
#include "file.h"
22
#include <string.h>
33
#include <stdbool.h>
44
#include <stdlib.h>
@@ -33,4 +33,10 @@ char *procParse(FILE *cpuinfo, char *buffer, char *field) {
3333
return NULL;
3434
}
3535

36-
36+
char *readFirstline(FILE *f) {
37+
char *line = NULL;
38+
size_t size = 0;
39+
getline(&line, &size, f);
40+
*strstr(line, "\n") = '\0';
41+
return line;
42+
}

src/proc.h renamed to src/file.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
#ifndef PROC_H
2-
#define PROC_H
1+
#ifndef FILE_H
2+
#define FILE_H
33

44
#include <stdio.h>
55

66
char *procParse(FILE *cpuinfo, char *buffer, char *field);
7+
char *readFirstline(FILE *f);
78

89

910
#endif

src/main.c

Lines changed: 2 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,12 @@
11
#include <stdio.h>
22
#include <stdlib.h>
3-
#include <sys/utsname.h>
4-
#include <sys/sysinfo.h>
53
#include <unistd.h>
6-
#include <math.h>
7-
#include <string.h>
84
#include "fetchline.h"
95
#include <stdbool.h>
10-
#include "proc.h"
11-
#include <unistd.h>
6+
#include "fetch.h"
127

138
#define BUFFER_SIZE 64
149

15-
#define SECONDS_MIN 60
16-
#define SECONDS_HOUR 3600
17-
#define SECONDS_DAY 86400
18-
void format_time(char *, long);
19-
unsigned long kBtoMiB(unsigned long kBytes);
20-
char *readFirstline(FILE *f);
21-
22-
void fetch_kernel(char *buffer);
23-
void fetch_hostname(char *buffer);
24-
void fetch_uptime(char *buffer);
25-
void fetch_cpumodel(char *buffer);
26-
void fetch_memory(char *buffer);
27-
void fetch_model(char *buffer);
28-
2910
int main(int argc, char *argv[]) {
3011
bool useIcons = false;
3112

@@ -54,87 +35,10 @@ int main(int argc, char *argv[]) {
5435

5536
align_fetchlist(fetcharray, sizeof(fetcharray) / sizeof(fetchlist));
5637

57-
// Get kernel information
58-
fetch_kernel(buffer);
59-
6038
for (size_t i = 0; i < sizeof(fetcharray) / sizeof(fetchlist); i++) {
61-
fetcharray[i].fetchfunc(buffer);
39+
fetcharray[i].fetchfunc(buffer, sizeof(buffer)/sizeof(char));
6240

6341
if(useIcons) printf("%s ", fetcharray[i].icon);
6442
printf("%s%s%s\n", fetcharray[i].title, SEPARATOR, buffer);
6543
}
6644
}
67-
68-
void format_time(char *buffer, long uptime_seconds) {
69-
// TODO: Tweak logic so that words aren't always plural
70-
if (uptime_seconds < SECONDS_MIN) {
71-
sprintf(buffer, "%ld seconds", uptime_seconds);
72-
} else if (uptime_seconds >= SECONDS_MIN && uptime_seconds < SECONDS_HOUR) {
73-
long uptime_minutes = uptime_seconds / SECONDS_MIN;
74-
long uptime_remaining_seconds = uptime_seconds - uptime_minutes*SECONDS_MIN;
75-
sprintf(buffer, "%ld minutes, %ld seconds", uptime_minutes, uptime_remaining_seconds);
76-
} else if (uptime_seconds >= SECONDS_HOUR && uptime_seconds < SECONDS_DAY ) {
77-
long uptime_hours = uptime_seconds / SECONDS_HOUR;
78-
long uptime_minutes = (uptime_seconds - uptime_hours*SECONDS_HOUR)/SECONDS_MIN;
79-
long uptime_remaining_seconds = uptime_seconds - uptime_hours*SECONDS_HOUR - uptime_minutes*SECONDS_MIN;
80-
sprintf(buffer, "%ld hours, %ld minutes, %ld seconds", uptime_hours, uptime_minutes, uptime_remaining_seconds);
81-
}
82-
else {
83-
long uptime_days = uptime_seconds / SECONDS_DAY;
84-
long uptime_hours = (uptime_seconds - uptime_days*SECONDS_DAY)/SECONDS_HOUR;
85-
long uptime_minutes = (uptime_seconds - uptime_hours*SECONDS_HOUR - uptime_days*SECONDS_DAY)/SECONDS_MIN;
86-
long uptime_remaining_seconds = uptime_seconds - uptime_minutes*SECONDS_MIN - uptime_hours*SECONDS_HOUR - uptime_days*SECONDS_DAY;
87-
sprintf(buffer, "%ld days, %ld hours, %ld minutes, %ld seconds", uptime_days, uptime_hours, uptime_minutes, uptime_remaining_seconds);
88-
}
89-
}
90-
91-
char *readFirstline(FILE *f) {
92-
char *line = NULL;
93-
size_t size = 0;
94-
getline(&line, &size, f);
95-
*strstr(line, "\n") = '\0';
96-
return line;
97-
}
98-
99-
void fetch_kernel(char *buffer) {
100-
struct utsname local_machine;
101-
uname(&local_machine);
102-
sprintf(buffer ,"%s %s %s", local_machine.sysname, local_machine.release, local_machine.machine );
103-
}
104-
105-
void fetch_hostname(char *buffer) {
106-
gethostname(buffer, BUFFER_SIZE);
107-
}
108-
109-
void fetch_uptime(char *buffer) {
110-
struct sysinfo machine_info;
111-
sysinfo(&machine_info);
112-
format_time(buffer, machine_info.uptime);
113-
}
114-
115-
void fetch_cpumodel(char *buffer) {
116-
FILE *cpuinfo = fopen("/proc/cpuinfo", "rb");
117-
procParse(cpuinfo, buffer, "model name");
118-
fclose(cpuinfo);
119-
}
120-
121-
void fetch_memory(char *buffer) {
122-
FILE *meminfo = fopen("/proc/meminfo", "rb");
123-
// TODO: CHange these arbitrary values to something a little more known
124-
char memtotal[16]; procParse(meminfo, memtotal, "MemTotal");
125-
char memavail[16]; procParse(meminfo, memavail, "MemAvailable");
126-
unsigned long totalkB = strtoul(memtotal, NULL, 10);
127-
unsigned long availkB = strtoul(memavail, NULL, 10);
128-
129-
char memLine[strlen(memtotal) + strlen(memavail) + 3];
130-
sprintf(buffer, "%.2fGiB / %.2fGiB", (float)(totalkB - availkB) / 1024 / 1024, (float)totalkB / 1024 / 1024);
131-
fclose(meminfo);
132-
}
133-
134-
void fetch_model(char *buffer) {
135-
FILE *model = fopen("/sys/devices/virtual/dmi/id/product_name", "rb");
136-
char *modelname = readFirstline(model);
137-
strcpy(buffer, modelname);
138-
free(modelname);
139-
fclose(model);
140-
}

0 commit comments

Comments
 (0)