Refactoring defines to enums

This commit is contained in:
Dr-Noob
2020-10-13 00:00:20 +02:00
parent e37c7d9ae0
commit 5119ece0dd
8 changed files with 251 additions and 250 deletions

View File

@@ -5,27 +5,26 @@
#include "args.h" #include "args.h"
#include "global.h" #include "global.h"
#define ARG_STR_STYLE "style"
#define ARG_STR_COLOR "color"
#define ARG_STR_HELP "help"
#define ARG_STR_LEVELS "levels"
#define ARG_STR_VERBOSE "verbose"
#define ARG_STR_VERSION "version"
#define ARG_CHAR_STYLE 0
#define ARG_CHAR_COLOR 1
#define ARG_CHAR_HELP 2
#define ARG_CHAR_LEVELS 3
#define ARG_CHAR_VERBOSE 4
#define ARG_CHAR_VERSION 5
#define STYLE_STR_1 "fancy"
#define STYLE_STR_2 "retro"
#define STYLE_STR_3 "legacy"
#define COLOR_STR_INTEL "intel" #define COLOR_STR_INTEL "intel"
#define COLOR_STR_AMD "amd" #define COLOR_STR_AMD "amd"
static const char *SYTLES_STR_LIST[] = {
[STYLE_EMPTY] = NULL,
[STYLE_FANCY] = "fancy",
[STYLE_RETRO] = "retro",
[STYLE_LEGACY] = "legacy",
[STYLE_INVALID] = NULL
};
enum {
ARG_CHAR_STYLE,
ARG_CHAR_COLOR,
ARG_CHAR_HELP,
ARG_CHAR_LEVELS,
ARG_CHAR_VERBOSE,
ARG_CHAR_VERSION
};
struct args_struct { struct args_struct {
bool levels_flag; bool levels_flag;
bool help_flag; bool help_flag;
@@ -35,7 +34,6 @@ struct args_struct {
struct colors* colors; struct colors* colors;
}; };
static const char* SYTLES_STR_LIST[STYLES_COUNT] = { STYLE_STR_1, STYLE_STR_2, STYLE_STR_3 };
static struct args_struct args; static struct args_struct args;
STYLE get_style() { STYLE get_style() {
@@ -63,12 +61,15 @@ bool verbose_enabled() {
} }
STYLE parse_style(char* style) { STYLE parse_style(char* style) {
int i = 0; uint8_t i = 0;
while(i != STYLES_COUNT && strcmp(SYTLES_STR_LIST[i],style) != 0) uint8_t styles_count = sizeof(SYTLES_STR_LIST) / sizeof(SYTLES_STR_LIST[0]);
while(i != styles_count && (SYTLES_STR_LIST[i] == NULL || strcmp(SYTLES_STR_LIST[i], style) != 0))
i++; i++;
if(i == STYLES_COUNT) if(i == styles_count)
return STYLE_INVALID; return STYLE_INVALID;
return i; return i;
} }
@@ -164,12 +165,12 @@ bool parse_args(int argc, char* argv[]) {
args.colors = NULL; args.colors = NULL;
static struct option long_options[] = { static struct option long_options[] = {
{ARG_STR_STYLE, required_argument, 0, ARG_CHAR_STYLE }, {"style", required_argument, 0, ARG_CHAR_STYLE },
{ARG_STR_COLOR, required_argument, 0, ARG_CHAR_COLOR }, {"color", required_argument, 0, ARG_CHAR_COLOR },
{ARG_STR_HELP, no_argument, 0, ARG_CHAR_HELP }, {"help", no_argument, 0, ARG_CHAR_HELP },
{ARG_STR_LEVELS, no_argument, 0, ARG_CHAR_LEVELS }, {"levels", no_argument, 0, ARG_CHAR_LEVELS },
{ARG_STR_VERBOSE, no_argument, 0, ARG_CHAR_VERBOSE }, {"verbose", no_argument, 0, ARG_CHAR_VERBOSE },
{ARG_STR_VERSION, no_argument, 0, ARG_CHAR_VERSION }, {"version", no_argument, 0, ARG_CHAR_VERSION },
{0, 0, 0, 0} {0, 0, 0, 0}
}; };

View File

@@ -17,6 +17,15 @@ struct colors {
struct color* c4; struct color* c4;
}; };
enum {
STYLE_EMPTY,
STYLE_FANCY,
STYLE_WILD,
STYLE_RETRO,
STYLE_LEGACY,
STYLE_INVALID
};
#include "printer.h" #include "printer.h"
bool parse_args(int argc, char* argv[]); bool parse_args(int argc, char* argv[]);

View File

@@ -20,20 +20,25 @@
#define CPU_VENDOR_INTEL_STRING "GenuineIntel" #define CPU_VENDOR_INTEL_STRING "GenuineIntel"
#define CPU_VENDOR_AMD_STRING "AuthenticAMD" #define CPU_VENDOR_AMD_STRING "AuthenticAMD"
#define HV_VENDOR_KVM_STRING "KVMKVMKVM" static const char *hv_vendors_string[] = {
#define HV_VENDOR_QEMU_STRING "TCGTCGTCGTCG" [HV_VENDOR_KVM] = "KVMKVMKVM",
#define HV_VENDOR_HYPERV_STRING "Microsoft Hv" [HV_VENDOR_QEMU] = "TCGTCGTCGTCG",
#define HV_VENDOR_VMWARE_STRING "VMwareVMware" [HV_VENDOR_HYPERV] = "Microsoft Hv",
#define HV_VENDOR_XEN_STRING "XenVMMXenVMM" [HV_VENDOR_VMWARE] = "VMwareVMware",
#define HV_VENDOR_PARALLELS_STRING "lrpepyh vr" [HV_VENDOR_XEN] = "XenVMMXenVMM",
[HV_VENDOR_PARALLELS] = "lrpepyh vr",
[HV_VENDOR_INVALID] = NULL
};
#define HV_KVM_STRING "KVM" static char *hv_vendors_name[] = {
#define HV_QEMU_STRING "QEMU" [HV_VENDOR_KVM] = "KVM",
#define HV_HYPERV_STRING "Microsoft Hyper-V" [HV_VENDOR_QEMU] = "QEMU",
#define HV_VMWARE_STRING "VMware" [HV_VENDOR_HYPERV] = "Microsoft Hyper-V",
#define HV_XEN_STRING "Xen" [HV_VENDOR_VMWARE] = "VMware",
#define HV_PARALLELS_STRING "Parallels" [HV_VENDOR_XEN] = "Xen",
#define HV_UNKNOWN_STRING "Unknown" [HV_VENDOR_PARALLELS] = "Parallels",
[HV_VENDOR_INVALID] = "Unknown"
};
#define STRING_YES "Yes" #define STRING_YES "Yes"
#define STRING_NO "No" #define STRING_NO "No"
@@ -106,40 +111,23 @@ void init_cache_struct(struct cache* cach) {
cach->L3->exists = false; cach->L3->exists = false;
} }
void get_cpu_vendor_internal(char* name, uint32_t ebx,uint32_t ecx,uint32_t edx) { void get_name_cpuid(char* name, uint32_t reg1, uint32_t reg2, uint32_t reg3) {
name[__COUNTER__] = ebx & MASK;
name[__COUNTER__] = (ebx>>8) & MASK;
name[__COUNTER__] = (ebx>>16) & MASK;
name[__COUNTER__] = (ebx>>24) & MASK;
name[__COUNTER__] = edx & MASK;
name[__COUNTER__] = (edx>>8) & MASK;
name[__COUNTER__] = (edx>>16) & MASK;
name[__COUNTER__] = (edx>>24) & MASK;
name[__COUNTER__] = ecx & MASK;
name[__COUNTER__] = (ecx>>8) & MASK;
name[__COUNTER__] = (ecx>>16) & MASK;
name[__COUNTER__] = (ecx>>24) & MASK;
}
void get_hv_vendor_internal(char* name, uint32_t ebx, uint32_t ecx, uint32_t edx) {
uint32_t c = 0; uint32_t c = 0;
name[c++] = ebx & MASK; name[c++] = reg1 & MASK;
name[c++] = (ebx>>8) & MASK; name[c++] = (reg1>>8) & MASK;
name[c++] = (ebx>>16) & MASK; name[c++] = (reg1>>16) & MASK;
name[c++] = (ebx>>24) & MASK; name[c++] = (reg1>>24) & MASK;
name[c++] = ecx & MASK; name[c++] = reg2 & MASK;
name[c++] = (ecx>>8) & MASK; name[c++] = (reg2>>8) & MASK;
name[c++] = (ecx>>16) & MASK; name[c++] = (reg2>>16) & MASK;
name[c++] = (ecx>>24) & MASK; name[c++] = (reg2>>24) & MASK;
name[c++] = edx & MASK; name[c++] = reg3 & MASK;
name[c++] = (edx>>8) & MASK; name[c++] = (reg3>>8) & MASK;
name[c++] = (edx>>16) & MASK; name[c++] = (reg3>>16) & MASK;
name[c++] = (edx>>24) & MASK; name[c++] = (reg3>>24) & MASK;
} }
char* get_str_cpu_name_internal() { char* get_str_cpu_name_internal() {
@@ -215,8 +203,6 @@ struct hypervisor* get_hp_info(bool hv_present) {
} }
hv->present = true; hv->present = true;
hv->hv_name = malloc(sizeof(char) * (HYPERVISOR_NAME_MAX_LENGTH+1));
memset(hv->hv_name, 0, HYPERVISOR_NAME_MAX_LENGTH+1);
uint32_t eax = 0x40000000; uint32_t eax = 0x40000000;
uint32_t ebx = 0; uint32_t ebx = 0;
@@ -227,45 +213,31 @@ struct hypervisor* get_hp_info(bool hv_present) {
char name[13]; char name[13];
memset(name, 0, 13); memset(name, 0, 13);
get_hv_vendor_internal(name, ebx, ecx, edx); get_name_cpuid(name, ebx, ecx, edx);
if(strcmp(HV_VENDOR_KVM_STRING, name) == 0) { bool found = false;
hv->hv_vendor = HV_VENDOR_KVM; uint8_t len = sizeof(hv_vendors_string) / sizeof(hv_vendors_string[0]);
strcpy(hv->hv_name, HV_KVM_STRING);
for(uint8_t v=0; v < len && !found; v++) {
if(strcmp(hv_vendors_string[v], name) == 0) {
hv->hv_vendor = v;
found = true;
} }
else if (strcmp(HV_VENDOR_QEMU_STRING, name) == 0) {
hv->hv_vendor = HV_VENDOR_QEMU;
strcpy(hv->hv_name, HV_QEMU_STRING);
} }
else if (strcmp(HV_VENDOR_HYPERV_STRING, name) == 0) {
hv->hv_vendor = HV_VENDOR_HYPERV; if(!found) {
strcpy(hv->hv_name, HV_HYPERV_STRING);
}
else if (strcmp(HV_VENDOR_VMWARE_STRING, name) == 0) {
hv->hv_vendor = HV_VENDOR_VMWARE;
strcpy(hv->hv_name, HV_VMWARE_STRING);
}
else if (strcmp(HV_VENDOR_XEN_STRING, name) == 0) {
hv->hv_vendor = HV_VENDOR_XEN;
strcpy(hv->hv_name, HV_XEN_STRING);
}
else if (strcmp(HV_VENDOR_PARALLELS_STRING, name) == 0) {
hv->hv_vendor = HV_VENDOR_PARALLELS;
strcpy(hv->hv_name, HV_PARALLELS_STRING);
}
else {
hv->hv_vendor = HV_VENDOR_INVALID; hv->hv_vendor = HV_VENDOR_INVALID;
printWarn("Unknown hypervisor vendor: %s", name); printWarn("Unknown hypervisor vendor: %s", name);
strcpy(hv->hv_name, HV_UNKNOWN_STRING);
} }
hv->hv_name = hv_vendors_name[hv->hv_vendor];
return hv; return hv;
} }
struct cpuInfo* get_cpu_info() { struct cpuInfo* get_cpu_info() {
struct cpuInfo* cpu = malloc(sizeof(struct cpuInfo)); struct cpuInfo* cpu = malloc(sizeof(struct cpuInfo));
init_cpu_info(cpu); init_cpu_info(cpu);
cpu->hv = malloc(sizeof(struct hypervisor));
uint32_t eax = 0; uint32_t eax = 0;
uint32_t ebx = 0; uint32_t ebx = 0;
@@ -279,7 +251,7 @@ struct cpuInfo* get_cpu_info() {
//Fill vendor //Fill vendor
char name[13]; char name[13];
memset(name,0,13); memset(name,0,13);
get_cpu_vendor_internal(name, ebx, ecx, edx); get_name_cpuid(name, ebx, edx, ecx);
if(strcmp(CPU_VENDOR_INTEL_STRING,name) == 0) if(strcmp(CPU_VENDOR_INTEL_STRING,name) == 0)
cpu->cpu_vendor = CPU_VENDOR_INTEL; cpu->cpu_vendor = CPU_VENDOR_INTEL;
@@ -1076,8 +1048,13 @@ void free_freq_struct(struct frequency* freq) {
free(freq); free(freq);
} }
void free_hv_struct(struct hypervisor* hv) {
free(hv);
}
void free_cpuinfo_struct(struct cpuInfo* cpu) { void free_cpuinfo_struct(struct cpuInfo* cpu) {
free_uarch_struct(cpu->arch); free_uarch_struct(cpu->arch);
free_hv_struct(cpu->hv);
free(cpu->cpu_name); free(cpu->cpu_name);
free(cpu); free(cpu);
} }

View File

@@ -3,19 +3,21 @@
#include <stdint.h> #include <stdint.h>
#define CPU_VENDOR_EMPTY 0 enum {
#define CPU_VENDOR_INTEL 1 CPU_VENDOR_INTEL,
#define CPU_VENDOR_AMD 2 CPU_VENDOR_AMD,
#define CPU_VENDOR_INVALID 3 CPU_VENDOR_INVALID
};
#define HV_VENDOR_EMPTY 0 enum {
#define HV_VENDOR_KVM 1 HV_VENDOR_KVM,
#define HV_VENDOR_QEMU 2 HV_VENDOR_QEMU,
#define HV_VENDOR_HYPERV 3 HV_VENDOR_HYPERV,
#define HV_VENDOR_VMWARE 4 HV_VENDOR_VMWARE,
#define HV_VENDOR_XEN 5 HV_VENDOR_XEN,
#define HV_VENDOR_PARALLELS 6 HV_VENDOR_PARALLELS,
#define HV_VENDOR_INVALID 7 HV_VENDOR_INVALID
};
#define UNKNOWN_FREQ -1 #define UNKNOWN_FREQ -1

View File

@@ -16,8 +16,10 @@
#endif #endif
#define LOG_LEVEL_NORMAL 0 enum {
#define LOG_LEVEL_VERBOSE 1 LOG_LEVEL_NORMAL,
LOG_LEVEL_VERBOSE
};
int LOG_LEVEL; int LOG_LEVEL;

View File

@@ -24,56 +24,59 @@
#define COL_AMD_RETRO_2 "\x1b[32;1m" #define COL_AMD_RETRO_2 "\x1b[32;1m"
#define RESET "\x1b[m" #define RESET "\x1b[m"
#define TITLE_NAME "Name:" enum {
#define TITLE_FREQUENCY "Max Frequency:" ATTRIBUTE_NAME,
#define TITLE_SOCKETS "Sockets:" ATTRIBUTE_HYPERVISOR,
#define TITLE_NCORES "Cores:" ATTRIBUTE_UARCH,
#define TITLE_NCORES_DUAL "Cores (Total):" ATTRIBUTE_TECHNOLOGY,
#define TITLE_AVX "AVX:" ATTRIBUTE_FREQUENCY,
#define TITLE_SSE "SSE:" ATTRIBUTE_SOCKETS,
#define TITLE_FMA "FMA:" ATTRIBUTE_NCORES,
#define TITLE_AES "AES:" ATTRIBUTE_NCORES_DUAL,
#define TITLE_SHA "SHA:" ATTRIBUTE_AVX,
#define TITLE_L1i "L1i Size:"
#define TITLE_L1d "L1d Size:"
#define TITLE_L2 "L2 Size:"
#define TITLE_L3 "L3 Size:"
#define TITLE_PEAK "Peak Performance:"
#define TITLE_UARCH "Microarchitecture:"
#define TITLE_TECHNOLOGY "Technology:"
#define TITLE_HYPERVISOR "Hypervisor:"
#define MAX_ATTRIBUTE_COUNT 15
#define ATTRIBUTE_NAME 0
#define ATTRIBUTE_HYPERVISOR 1
#define ATTRIBUTE_UARCH 2
#define ATTRIBUTE_TECHNOLOGY 3
#define ATTRIBUTE_FREQUENCY 4
#define ATTRIBUTE_SOCKETS 5
#define ATTRIBUTE_NCORES 6
#define ATTRIBUTE_NCORES_DUAL 7
#define ATTRIBUTE_AVX 8
#define ATTRIBUTE_FMA 9
#define ATTRIBUTE_L1i 10
#define ATTRIBUTE_L1d 11
#define ATTRIBUTE_L2 12
#define ATTRIBUTE_L3 13
#define ATTRIBUTE_PEAK 14
static const char* ATTRIBUTE_FIELDS [MAX_ATTRIBUTE_COUNT] = { TITLE_NAME, TITLE_HYPERVISOR, TITLE_UARCH, TITLE_TECHNOLOGY,
TITLE_FREQUENCY, TITLE_SOCKETS,
TITLE_NCORES, TITLE_NCORES_DUAL,
TITLE_AVX,
TITLE_FMA, TITLE_L1i, TITLE_L1d, TITLE_L2, TITLE_L3,
TITLE_PEAK,
};
static const int ATTRIBUTE_LIST[MAX_ATTRIBUTE_COUNT] = { ATTRIBUTE_NAME, ATTRIBUTE_HYPERVISOR, ATTRIBUTE_UARCH, ATTRIBUTE_TECHNOLOGY,
ATTRIBUTE_FREQUENCY, ATTRIBUTE_SOCKETS,
ATTRIBUTE_NCORES, ATTRIBUTE_NCORES_DUAL, ATTRIBUTE_AVX,
ATTRIBUTE_FMA, ATTRIBUTE_FMA,
ATTRIBUTE_L1i, ATTRIBUTE_L1d, ATTRIBUTE_L2, ATTRIBUTE_L3, ATTRIBUTE_L1i,
ATTRIBUTE_PEAK }; ATTRIBUTE_L1d,
ATTRIBUTE_L2,
ATTRIBUTE_L3,
ATTRIBUTE_PEAK
};
static const char* ATTRIBUTE_FIELDS [] = {
"Name:",
"Hypervisor:",
"Microarchitecture:",
"Technology:",
"Max Frequency:",
"Sockets:",
"Cores:",
"Cores (Total):",
"AVX:",
"FMA:",
"L1i Size:",
"L1d Size:",
"L2 Size:",
"L3 Size:",
"Peak Performance:",
};
static const int ATTRIBUTE_LIST[] = {
ATTRIBUTE_NAME,
ATTRIBUTE_HYPERVISOR,
ATTRIBUTE_UARCH,
ATTRIBUTE_TECHNOLOGY,
ATTRIBUTE_FREQUENCY,
ATTRIBUTE_SOCKETS,
ATTRIBUTE_NCORES,
ATTRIBUTE_NCORES_DUAL,
ATTRIBUTE_AVX,
ATTRIBUTE_FMA,
ATTRIBUTE_L1i,
ATTRIBUTE_L1d,
ATTRIBUTE_L2,
ATTRIBUTE_L3,
ATTRIBUTE_PEAK
};
struct ascii { struct ascii {
char art[NUMBER_OF_LINES][LINE_SIZE]; char art[NUMBER_OF_LINES][LINE_SIZE];
@@ -83,9 +86,11 @@ struct ascii {
char color2_text[100]; char color2_text[100];
char ascii_chars[2]; char ascii_chars[2];
char reset[100]; char reset[100];
char* attributes[MAX_ATTRIBUTE_COUNT]; char** attributes;
uint32_t max_attributes;
uint32_t n_attributes_set; uint32_t n_attributes_set;
VENDOR vendor; VENDOR vendor;
STYLE style;
}; };
void setAttribute(struct ascii* art, int type, char* value) { void setAttribute(struct ascii* art, int type, char* value) {
@@ -110,7 +115,8 @@ char* rgb_to_ansi(struct color* c, bool background, bool bold) {
struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) { struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) {
// Sanity checks // // Sanity checks //
for(int i=0; i < MAX_ATTRIBUTE_COUNT; i++) { uint32_t max_attributes = sizeof(ATTRIBUTE_LIST) / sizeof(ATTRIBUTE_LIST[0]);
for(uint32_t i=0; i < max_attributes; i++) {
if(ATTRIBUTE_FIELDS[i] == NULL) { if(ATTRIBUTE_FIELDS[i] == NULL) {
printBug("Attribute field at position %d is empty", i); printBug("Attribute field at position %d is empty", i);
return NULL; return NULL;
@@ -125,11 +131,13 @@ struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) {
struct ascii* art = malloc(sizeof(struct ascii)); struct ascii* art = malloc(sizeof(struct ascii));
art->n_attributes_set = 0; art->n_attributes_set = 0;
art->vendor = cpuVendor; art->vendor = cpuVendor;
for(int i=0; i < MAX_ATTRIBUTE_COUNT; i++) art->max_attributes = max_attributes;
art->attributes = malloc(sizeof(char *) * art->max_attributes);
for(uint32_t i=0; i < art->max_attributes; i++)
art->attributes[i] = NULL; art->attributes[i] = NULL;
strcpy(art->reset,RESET); strcpy(art->reset,RESET);
if(cpuVendor == CPU_VENDOR_INTEL) { if(art->vendor == CPU_VENDOR_INTEL) {
COL_FANCY_1 = COL_INTEL_FANCY_1; COL_FANCY_1 = COL_INTEL_FANCY_1;
COL_FANCY_2 = COL_INTEL_FANCY_2; COL_FANCY_2 = COL_INTEL_FANCY_2;
COL_FANCY_3 = COL_INTEL_FANCY_3; COL_FANCY_3 = COL_INTEL_FANCY_3;
@@ -153,16 +161,18 @@ struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) {
} }
art->ascii_chars[1] = '#'; art->ascii_chars[1] = '#';
// If style is emtpy, set the default style
if(style == STYLE_EMPTY) { if(style == STYLE_EMPTY) {
#ifdef _WIN32 #ifdef _WIN32
style = STYLE_LEGACY; art->style = STYLE_LEGACY;
#else #else
style = STYLE_FANCY; art->style = STYLE_FANCY;
#endif #endif
} }
else {
art->style = style;
}
switch(style) { switch(art->style) {
case STYLE_LEGACY: case STYLE_LEGACY:
strcpy(art->color1_ascii,COL_NONE); strcpy(art->color1_ascii,COL_NONE);
strcpy(art->color2_ascii,COL_NONE); strcpy(art->color2_ascii,COL_NONE);
@@ -210,13 +220,16 @@ struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) {
break; break;
case STYLE_INVALID: case STYLE_INVALID:
default: default:
printBug("Found invalid style (%d)",style); printBug("Found invalid style (%d)", art->style);
return NULL; return NULL;
} }
char tmp[NUMBER_OF_LINES*LINE_SIZE]; char tmp[NUMBER_OF_LINES*LINE_SIZE];
if(cpuVendor == CPU_VENDOR_INTEL) strcpy(tmp, INTEL_ASCII); if(art->vendor == CPU_VENDOR_INTEL)
else strcpy(tmp, AMD_ASCII); strcpy(tmp, INTEL_ASCII);
else
strcpy(tmp, AMD_ASCII);
for(int i=0; i < NUMBER_OF_LINES; i++) for(int i=0; i < NUMBER_OF_LINES; i++)
strncpy(art->art[i], tmp + i*LINE_SIZE, LINE_SIZE); strncpy(art->art[i], tmp + i*LINE_SIZE, LINE_SIZE);
@@ -245,9 +258,10 @@ void print_ascii_intel(struct ascii* art, uint32_t la) {
flag = false; flag = false;
printf("%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset); printf("%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset);
} }
else else {
printf("%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset); printf("%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset);
} }
}
else { else {
if(art->art[n][i] != ' ' && art->art[n][i] != '\0') { if(art->art[n][i] != ' ' && art->art[n][i] != '\0') {
flag = true; flag = true;
@@ -300,7 +314,7 @@ uint32_t longest_attribute_length(struct ascii* art) {
uint32_t max = 0; uint32_t max = 0;
uint64_t len = 0; uint64_t len = 0;
for(int i=0; i < MAX_ATTRIBUTE_COUNT; i++) { for(uint32_t i=0; i < art->max_attributes; i++) {
if(art->attributes[i] != NULL) { if(art->attributes[i] != NULL) {
len = strlen(ATTRIBUTE_FIELDS[i]); len = strlen(ATTRIBUTE_FIELDS[i]);
if(len > max) max = len; if(len > max) max = len;
@@ -380,6 +394,7 @@ bool print_cpufetch(struct cpuInfo* cpu, struct cache* cach, struct frequency* f
free(l3); free(l3);
free(pp); free(pp);
free(art->attributes);
free(art); free(art);
if(cs != NULL) free_colors_struct(cs); if(cs != NULL) free_colors_struct(cs);

View File

@@ -6,14 +6,6 @@ typedef int STYLE;
#include "args.h" #include "args.h"
#include "cpuid.h" #include "cpuid.h"
#define STYLES_COUNT 3
#define STYLE_INVALID -2
#define STYLE_EMPTY -1
#define STYLE_FANCY 0
#define STYLE_RETRO 1
#define STYLE_LEGACY 2
#define COLOR_DEFAULT_INTEL "15,125,194:230,230,230:40,150,220:230,230,230" #define COLOR_DEFAULT_INTEL "15,125,194:230,230,230:40,150,220:230,230,230"
#define COLOR_DEFAULT_AMD "250,250,250:0,154,102:250,250,250:0,154,102" #define COLOR_DEFAULT_AMD "250,250,250:0,154,102:250,250,250:0,154,102"

View File

@@ -43,64 +43,67 @@ typedef uint32_t MICROARCH;
// Unknown manufacturing process // Unknown manufacturing process
#define UNK -1 #define UNK -1
#define UARCH_UNKNOWN 0x000 enum {
#define UARCH_P5 0x001 UARCH_UNKNOWN,
#define UARCH_P6 0x002 // INTEL //
#define UARCH_DOTHAN 0x003 UARCH_P5,
#define UARCH_YONAH 0x004 UARCH_P6,
#define UARCH_MEROM 0x005 UARCH_DOTHAN,
#define UARCH_PENYR 0x006 UARCH_YONAH,
#define UARCH_NEHALEM 0x007 UARCH_MEROM,
#define UARCH_WESTMERE 0x008 UARCH_PENYR,
#define UARCH_BONNELL 0x009 UARCH_NEHALEM,
#define UARCH_SALTWELL 0x010 UARCH_WESTMERE,
#define UARCH_SANDY_BRIDGE 0x011 UARCH_BONNELL,
#define UARCH_SILVERMONT 0x012 UARCH_SALTWELL,
#define UARCH_IVY_BRIDGE 0x013 UARCH_SANDY_BRIDGE,
#define UARCH_HASWELL 0x014 UARCH_SILVERMONT,
#define UARCH_BROADWELL 0x015 UARCH_IVY_BRIDGE,
#define UARCH_AIRMONT 0x016 UARCH_HASWELL,
#define UARCH_KABY_LAKE 0x017 UARCH_BROADWELL,
#define UARCH_SKYLAKE 0x018 UARCH_AIRMONT,
#define UARCH_CASCADE_LAKE 0x019 UARCH_KABY_LAKE,
#define UARCH_COOPER_LAKE 0x020 UARCH_SKYLAKE,
#define UARCH_KNIGHTS_LANDING 0x021 UARCH_CASCADE_LAKE,
#define UARCH_KNIGHTS_MILL 0x022 UARCH_COOPER_LAKE,
#define UARCH_GOLDMONT 0x023 UARCH_KNIGHTS_LANDING,
#define UARCH_PALM_COVE 0x024 UARCH_KNIGHTS_MILL,
#define UARCH_SUNNY_COVE 0x025 UARCH_GOLDMONT,
#define UARCH_GOLDMONT_PLUS 0x026 UARCH_PALM_COVE,
#define UARCH_TREMONT 0x027 UARCH_SUNNY_COVE,
#define UARCH_WILLOW_COVE 0x028 UARCH_GOLDMONT_PLUS,
#define UARCH_COFFE_LAKE 0x029 UARCH_TREMONT,
#define UARCH_ITANIUM 0x030 UARCH_WILLOW_COVE,
#define UARCH_KNIGHTS_FERRY 0x031 UARCH_COFFE_LAKE,
#define UARCH_KNIGHTS_CORNER 0x032 UARCH_ITANIUM,
#define UARCH_WILLAMETTE 0x033 UARCH_KNIGHTS_FERRY,
#define UARCH_NORTHWOOD 0x034 UARCH_KNIGHTS_CORNER,
#define UARCH_PRESCOTT 0x035 UARCH_WILLAMETTE,
#define UARCH_CEDAR_MILL 0x036 UARCH_NORTHWOOD,
#define UARCH_ITANIUM2 0x037 UARCH_PRESCOTT,
#define UARCH_ICE_LAKE 0x038 UARCH_CEDAR_MILL,
UARCH_ITANIUM2,
#define UARCH_AM486 0x038 UARCH_ICE_LAKE,
#define UARCH_AM5X86 0x039 // AMD //
#define UARCH_K6 0x040 UARCH_AM486,
#define UARCH_K7 0x041 UARCH_AM5X86,
#define UARCH_K8 0x042 UARCH_K6,
#define UARCH_K10 0x043 UARCH_K7,
#define UARCH_PUMA_2008 0x044 UARCH_K8,
#define UARCH_BOBCAT 0x045 UARCH_K10,
#define UARCH_BULLDOZER 0x046 UARCH_PUMA_2008,
#define UARCH_PILEDRIVER 0x047 UARCH_BOBCAT,
#define UARCH_STEAMROLLER 0x048 UARCH_BULLDOZER,
#define UARCH_EXCAVATOR 0x049 UARCH_PILEDRIVER,
#define UARCH_JAGUAR 0x050 UARCH_STEAMROLLER,
#define UARCH_PUMA_2014 0x051 UARCH_EXCAVATOR,
#define UARCH_ZEN 0x052 UARCH_JAGUAR,
#define UARCH_ZEN_PLUS 0x053 UARCH_PUMA_2014,
#define UARCH_ZEN2 0x054 UARCH_ZEN,
#define UARCH_ZEN3 0x055 UARCH_ZEN_PLUS,
UARCH_ZEN2,
UARCH_ZEN3
};
struct uarch { struct uarch {
MICROARCH uarch; MICROARCH uarch;