From 672859785111bddf58497c3973f16926cb634cc4 Mon Sep 17 00:00:00 2001 From: jgabaut <109908086+jgabaut@users.noreply.github.com> Date: Fri, 25 Aug 2023 05:40:08 +0200 Subject: [PATCH] feat: 0.1.9 add kls_usageReport() (#10) * feat: add kls_usageReport() * feat: bump amboso to 1.6.3 * feat: 0.1.9 kls_usageReport() Fixes wrong printf in kls_showList(). --- amboso | 2 +- bin/stego.lock | 1 + bin/v0.1.9/.gitignore | 4 ++ bin/v0.1.9/static | 1 + configure.ac | 4 +- docs/koliseo.doxyfile | 2 +- src/koliseo.c | 107 ++++++++++++++++++++++++++++-------------- src/koliseo.h | 20 +++++--- static/demo.c | 13 +++-- 9 files changed, 106 insertions(+), 48 deletions(-) create mode 100644 bin/v0.1.9/.gitignore create mode 120000 bin/v0.1.9/static diff --git a/amboso b/amboso index fe16210..ca33168 160000 --- a/amboso +++ b/amboso @@ -1 +1 @@ -Subproject commit fe16210bd53440ee2e1ccf36a4fb2f8e6d330341 +Subproject commit ca331686a967f3d584e0e839d183526e12b74f13 diff --git a/bin/stego.lock b/bin/stego.lock index 9af2729..6f41d0a 100644 --- a/bin/stego.lock +++ b/bin/stego.lock @@ -13,3 +13,4 @@ tests# tests folder name 0.1.6# functional Koliseo_Temp 0.1.7# add Region_List 0.1.8# improved Region API +0.1.9# add kls_usageReport() diff --git a/bin/v0.1.9/.gitignore b/bin/v0.1.9/.gitignore new file mode 100644 index 0000000..f915d8e --- /dev/null +++ b/bin/v0.1.9/.gitignore @@ -0,0 +1,4 @@ +#amboso compliant version folder, will ignore everything inside BUT the gitignore, to keep the clean dir +* +!.gitignore +!static diff --git a/bin/v0.1.9/static b/bin/v0.1.9/static new file mode 120000 index 0000000..382349a --- /dev/null +++ b/bin/v0.1.9/static @@ -0,0 +1 @@ +../../static/ \ No newline at end of file diff --git a/configure.ac b/configure.ac index 3011ea7..dca1e0e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ # Define the package name and version -AC_INIT([koliseo], [0.1.8], [jgabaut@github.com]) +AC_INIT([koliseo], [0.1.9], [jgabaut@github.com]) # Verify automake version and enable foreign option AM_INIT_AUTOMAKE([foreign -Wall]) @@ -24,7 +24,7 @@ fi # Set a default version number if not specified externally AC_ARG_VAR([VERSION], [Version number]) if test -z "$VERSION"; then - VERSION="0.1.8" + VERSION="0.1.9" fi # Output variables to the config.h header diff --git a/docs/koliseo.doxyfile b/docs/koliseo.doxyfile index e8099a0..6b7e544 100644 --- a/docs/koliseo.doxyfile +++ b/docs/koliseo.doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = "koliseo" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "0.1.8" +PROJECT_NUMBER = "0.1.9" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/koliseo.c b/src/koliseo.c index da82031..ed0299f 100644 --- a/src/koliseo.c +++ b/src/koliseo.c @@ -1,5 +1,7 @@ #include "koliseo.h" +//Default settings for global vars. int KOLISEO_DEBUG = 0; +int KOLISEO_AUTOSET_REGIONS = 1; FILE* KOLISEO_DEBUG_FP = NULL; /** @@ -62,19 +64,21 @@ Koliseo* kls_new(ptrdiff_t size) { kls->size = size; kls->offset = sizeof(*kls); kls->prev_offset = kls->offset; - sprintf(msg,"Init of Region_List for kls."); - kls_log("KLS",msg); - Region* kls_header = (Region*) malloc(sizeof(Region)); - kls_header->begin_offset = 0; - kls_header->end_offset = kls->offset; - strcpy(kls_header->name,"KLS Header"); - strcpy(kls_header->desc,"Denotes Space occupied by the Koliseo header."); - Region_List reglist = kls_emptyList(); - reglist = kls_cons(kls_header,reglist); - kls->regs = reglist; - if (kls->regs == NULL) { - fprintf(stderr,"[KLS] kls_new() failed to get a Region_List.\n"); - abort(); + if (KOLISEO_AUTOSET_REGIONS == 1) { + sprintf(msg,"Init of Region_List for kls."); + kls_log("KLS",msg); + Region* kls_header = (Region*) malloc(sizeof(Region)); + kls_header->begin_offset = 0; + kls_header->end_offset = kls->offset; + strcpy(kls_header->name,"KLS Header"); + strcpy(kls_header->desc,"Denotes Space occupied by the Koliseo header."); + Region_List reglist = kls_emptyList(); + reglist = kls_cons(kls_header,reglist); + kls->regs = reglist; + if (kls->regs == NULL) { + fprintf(stderr,"[KLS] kls_new() failed to get a Region_List.\n"); + abort(); + } } } else { fprintf(stderr,"[KLS] Failed kls_new() call.\n"); @@ -172,14 +176,16 @@ void* kls_push_zero(Koliseo* kls, ptrdiff_t size, ptrdiff_t align, ptrdiff_t cou memset(p, 0, size*count); kls->prev_offset = kls->offset; kls->offset += padding + size*count; - Region* reg = (Region*) malloc(sizeof(Region)); - reg->begin_offset = kls->prev_offset; - reg->end_offset = kls->offset; - strcpy(reg->name, KOLISEO_DEFAULT_REGION_NAME); - strcpy(reg->desc,KOLISEO_DEFAULT_REGION_DESC); - Region_List reglist = kls_emptyList(); - reglist = kls_cons(reg,reglist); - kls->regs = kls_append(reglist, kls->regs); + if (KOLISEO_AUTOSET_REGIONS == 1) { + Region* reg = (Region*) malloc(sizeof(Region)); + reg->begin_offset = kls->prev_offset; + reg->end_offset = kls->offset; + strcpy(reg->name, KOLISEO_DEFAULT_REGION_NAME); + strcpy(reg->desc,KOLISEO_DEFAULT_REGION_DESC); + Region_List reglist = kls_emptyList(); + reglist = kls_cons(reg,reglist); + kls->regs = kls_append(reglist, kls->regs); + } char msg[500]; sprintf(msg,"Pushed zeroes, size (%li) for KLS.",size); @@ -389,30 +395,25 @@ void kls_showList_toFile(Region_List l, FILE* fp) { abort(); } char msg[1000]; - printf("["); + fprintf(fp,"["); while (!kls_empty(l)) { - fprintf(fp,"--BEGIN Region--\n\n"); - fprintf(fp,"Begin [%li] End [%li]\n",kls_head(l)->begin_offset,kls_head(l)->end_offset); - fprintf(fp,"Name [%s] Desc [%s]",kls_head(l)->name,kls_head(l)->desc); - fprintf(fp,"\n\n--END Region--"); + fprintf(fp,"\n[%s], [%s] ",kls_head(l)->name,kls_head(l)->desc); + fprintf(fp,"[%li]->[%li]",kls_head(l)->begin_offset,kls_head(l)->end_offset); kls_log("KLS","--BEGIN Region--"); - sprintf(msg,"Begin [%li] End [%li]",kls_head(l)->begin_offset,kls_head(l)->end_offset); + sprintf(msg,"[%s], [%s]",kls_head(l)->name,kls_head(l)->desc); kls_log("KLS",msg); - sprintf(msg,"Name [%s] Desc [%s]",kls_head(l)->name,kls_head(l)->desc); + sprintf(msg,"[%li]->[%li]",kls_head(l)->begin_offset,kls_head(l)->end_offset); kls_log("KLS",msg); kls_log("KLS","--END Region--"); - kls_log("KLS",msg); - //TODO - //Print containing kls - //print_kls_2file(stdout,kls_head(l)); + l = kls_tail(l); if (!kls_empty(l)) { fprintf(fp,",\n"); } } - fprintf(fp,"]\n"); + fprintf(fp,"\n]\n"); } void kls_showList(Region_List l) { @@ -436,14 +437,14 @@ bool kls_member(element el, Region_List l) { } } } -int kls_lenght(Region_List l) { +int kls_length(Region_List l) { if (kls_empty(l)) { return 0; } else { - return 1 + kls_lenght(kls_tail(l)); + return 1 + kls_length(kls_tail(l)); } } Region_List kls_append(Region_List l1, Region_List l2) { @@ -614,3 +615,39 @@ bool kls_isLess(Region* r1, Region* r2) { bool kls_isEqual(Region* r1, Region* r2) { return (r1->begin_offset == r2->begin_offset); } + +double kls_usageShare(Region* r, Koliseo* kls) { + if (r == NULL) { + kls_log("ERROR","kls_usageShare(): passed Region was NULL"); + return -1; + } + if (kls == NULL) { + kls_log("ERROR","kls_usageShare(): passed Koliseo was NULL"); + return -1; + } + ptrdiff_t r_size = r->end_offset - r->begin_offset; + double res = (r_size * 100.0) / kls->size; + return res; +} + +void kls_usageReport_toFile(Koliseo* kls, FILE* fp) { + if (fp == NULL) { + kls_log("ERROR","kls_usageReport_toFile(): passed file was NULL"); + return; + } + if (kls == NULL) { + kls_log("ERROR","kls_usageReport_toFile(): passed Koliseo was NULL"); + return; + } + Region_List rl = kls_copy(kls->regs); + int i = 0; + while(!kls_empty(rl)) { + fprintf(fp,"Usage for region (%i) [%s]: [%.3f%%]\n", i, rl->value->name, kls_usageShare(rl->value,kls)); + rl = kls_tail(rl); + i++; + } +} + +void kls_usageReport(Koliseo* kls) { + kls_usageReport_toFile(kls,stdout); +} diff --git a/src/koliseo.h b/src/koliseo.h index 3f0c548..6419b8f 100644 --- a/src/koliseo.h +++ b/src/koliseo.h @@ -10,19 +10,23 @@ #define KLS_MAJOR 0 /**< Represents current major release.*/ #define KLS_MINOR 1 /**< Represents current minor release.*/ -#define KLS_PATCH 8 /**< Represents current patch release.*/ +#define KLS_PATCH 9 /**< Represents current patch release.*/ /** * Global variable for debug flag. */ extern int KOLISEO_DEBUG; +/** + * Global variable for auto-setting of Regions flag. + */ +extern int KOLISEO_AUTOSET_REGIONS; /** * Global variable for debug file pointer. */ extern FILE* KOLISEO_DEBUG_FP; -static const char KOLISEO_API_VERSION_STRING[] = "0.1.8"; /**< Represents current version with MAJOR.MINOR.PATCH format.*/ +static const char KOLISEO_API_VERSION_STRING[] = "0.1.9"; /**< Represents current version with MAJOR.MINOR.PATCH format.*/ const char* string_koliseo_version(void); @@ -120,7 +124,6 @@ void kls_temp_end(Koliseo_Temp tmp_kls); #define KLS_PUSH_T_NAMED(kls_temp, type, count, name, desc) (type*)KLS_PUSH_NAMED(kls_temp.kls, type, count, name, desc) #define KLS_POP_T(kls_temp, type, count) (type*)KLS_POP(kls_temp.kls, type, count) - Region_List kls_emptyList(void); #define KLS_GETLIST() kls_emptyList() bool kls_empty(Region_List); @@ -135,21 +138,26 @@ void kls_showList_toFile(Region_List, FILE* fp); #define KLS_ECHOLIST(kls_list) kls_showList(kls_list) #define KLS_PRINTLIST(kls_list,file) kls_showList_toFile(kls_list,file) bool kls_member(element, Region_List); -int kls_lenght(Region_List); +int kls_length(Region_List); Region_List kls_append(Region_List, Region_List); Region_List kls_reverse(Region_List); Region_List kls_copy(Region_List); Region_List kls_delet(element, Region_List); Region_List kls_insord(element, Region_List); -#define KLS_PUSHLIST(kls,kls_list) kls_insord(kls,kls_list) +#define KLS_PUSHLIST(reg,kls_list) kls_insord(reg,kls_list) Region_List kls_insord_p(element, Region_List); -#define KLS_PUSHLIST_P(kls,kls_list) kls_insord_p(kls,kls_list) +#define KLS_PUSHLIST_P(reg,kls_list) kls_insord_p(reg,kls_list) Region_List kls_mergeList(Region_List, Region_List); Region_List kls_intersect(Region_List, Region_List); Region_List kls_diff(Region_List, Region_List); + +#define KLS_DIFF(kls_list1,kls_list2) kls_diff(kls_list1,kls_list2) bool kls_isLess(element, element); bool kls_isEqual(element, element); +double kls_usageShare(element, Koliseo*); +void kls_usageReport_toFile(Koliseo*,FILE*); +void kls_usageReport(Koliseo*); #endif diff --git a/static/demo.c b/static/demo.c index d8bcd28..631b822 100644 --- a/static/demo.c +++ b/static/demo.c @@ -4,9 +4,11 @@ int main(void) { KOLISEO_DEBUG = 1; + KOLISEO_AUTOSET_REGIONS = 1; printf("Demo for Koliseo, using API version %s\n", string_koliseo_version()); printf("Supporting Amboso API version %s\n\n", getAmbosoVersion()); printf("KOLISEO_DEBUG is [%i]\n\n", KOLISEO_DEBUG); + printf("KOLISEO_AUTOSET_REGIONS is [%i]\n\n", KOLISEO_AUTOSET_REGIONS); //Reset debug log file if (KOLISEO_DEBUG == 1) { KOLISEO_DEBUG_FP = fopen("./static/debug_log.txt","w"); @@ -34,9 +36,9 @@ int main(void) { print_dbg_kls(kls); - printf("[Show Region list for Koliseo] [pos: %li]\n",kls_get_pos(kls)); + printf("[Show reversed Region list for Koliseo] [pos: %li]\n",kls_get_pos(kls)); - KLS_ECHOLIST(kls->regs); + KLS_ECHOLIST(kls_reverse(kls->regs)); Koliseo_Temp temp_kls = kls_temp_start(kls); printf("[Started Koliseo_Temp] [pos: %li]\n",kls_get_pos(temp_kls.kls)); @@ -65,10 +67,14 @@ int main(void) { printf("\n*p2 is [%i] after KLS_PUSH\n",*p2); *p2 = 3; printf("\n*p3 is [%i] after KLS_PUSH\n",*p3); - + printf("[Show reversed Region list for Koliseo] [pos: %li]\n",kls_get_pos(kls)); KLS_ECHOLIST(kls_reverse(kls->regs)); + printf("[%i] List size\n",kls_length(kls->regs)); + + printf("[Usage report for Koliseo]\n"); + kls_usageReport(kls); int* z = &minusone; printf("\n*z is [%i] before KLS_POP\n",*z); @@ -95,6 +101,7 @@ int main(void) { kls_free(kls); printf("[End of demo]\n"); + printf("[End of demo for Koliseo v%s]\n", string_koliseo_version()); if (KOLISEO_DEBUG == 1) { fclose(KOLISEO_DEBUG_FP); }