From 5149f2fe08bc672f671b9afff72192885f14b120 Mon Sep 17 00:00:00 2001
From: FlorealRISSO <floreal.risso@univ-tlse3.fr>
Date: Tue, 28 Mar 2023 09:36:14 +0200
Subject: [PATCH] update: script

---
 .gitignore                                |   1 +
 meminfo_option.sh                         |  48 ---
 src/meminfo_option.h                      | 402 ----------------------
 src/meminfo_option.sh                     |  46 +++
 src/{memory_extra.c => memory_counters.c} |  12 +-
 5 files changed, 53 insertions(+), 456 deletions(-)
 delete mode 100644 meminfo_option.sh
 delete mode 100644 src/meminfo_option.h
 create mode 100644 src/meminfo_option.sh
 rename src/{memory_extra.c => memory_counters.c} (89%)

diff --git a/.gitignore b/.gitignore
index 83a8dc0..eb6940e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ doc/info_reader_ex
 doc/mojitos.1
 tests/run
 src/counters_option.h
+src/meminfo_option.h
 src/sensors.h
 sensors.mk
 bin
diff --git a/meminfo_option.sh b/meminfo_option.sh
deleted file mode 100644
index 4443868..0000000
--- a/meminfo_option.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!bin/sh
-
-MEMINFO="/proc/meminfo"
-COUNT=0
-
-function get_meminfo_words {
-	printf "char *meminfo_words[] = {\n"
-	while read line; do
-		COUNT=$(expr $COUNT + 1)
-		word=$(echo $line | awk '{print $1}')
-		printf "    \"${word::-1}\",\n"
-	done <$MEMINFO
-
-	printf "};\n\n"
-}
-
-function get_count {
-	printf "static const unsigned int meminfo_count = $COUNT;\n\n"
-}
-
-function get_meminfo_setter {
-	count=0
-	while [ $count -lt $COUNT ]; do
-		printf "void set_result_offset$count(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[$count] = (uint64_t) data;
-}\n\n"
-		count=$(expr $count + 1)
-	done
-}
-
-function get_functions {
-	printf "static void (*setter_functions[])(GenericPointer, GenericPointer) = {\n"
-	count=0
-	while [ $count -lt $COUNT ]; do
-		printf "    set_result_offset$count,\n"
-		count=$(expr $count + 1)
-	done
-	printf "};\n\n"
-}
-
-DEST="./src/meminfo_option.h"
-printf "#include \"inttypes.h\"\n" >$DEST
-printf "#include <info_reader.h>\n\n" >>$DEST
-get_meminfo_words "./text.h" >>$DEST
-get_count >>$DEST
-get_meminfo_setter >>$DEST
-get_functions >>$DEST
diff --git a/src/meminfo_option.h b/src/meminfo_option.h
deleted file mode 100644
index f3369b8..0000000
--- a/src/meminfo_option.h
+++ /dev/null
@@ -1,402 +0,0 @@
-#include "inttypes.h"
-#include <info_reader.h>
-char *meminfo_words[] = {
-    "MemTotal",
-    "MemFree",
-    "MemAvailable",
-    "Buffers",
-    "Cached",
-    "SwapCached",
-    "Active",
-    "Inactive",
-    "Active(anon)",
-    "Inactive(anon)",
-    "Active(file)",
-    "Inactive(file)",
-    "Unevictable",
-    "Mlocked",
-    "SwapTotal",
-    "SwapFree",
-    "Zswap",
-    "Zswapped",
-    "Dirty",
-    "Writeback",
-    "AnonPages",
-    "Mapped",
-    "Shmem",
-    "KReclaimable",
-    "Slab",
-    "SReclaimable",
-    "SUnreclaim",
-    "KernelStack",
-    "PageTables",
-    "SecPageTables",
-    "NFS_Unstable",
-    "Bounce",
-    "WritebackTmp",
-    "CommitLimit",
-    "Committed_AS",
-    "VmallocTotal",
-    "VmallocUsed",
-    "VmallocChunk",
-    "Percpu",
-    "HardwareCorrupted",
-    "AnonHugePages",
-    "ShmemHugePages",
-    "ShmemPmdMapped",
-    "FileHugePages",
-    "FilePmdMapped",
-    "CmaTotal",
-    "CmaFree",
-    "HugePages_Total",
-    "HugePages_Free",
-    "HugePages_Rsvd",
-    "HugePages_Surp",
-    "Hugepagesize",
-    "Hugetlb",
-    "DirectMap4k",
-    "DirectMap2M",
-    "DirectMap1G",
-};
-
-static const unsigned int meminfo_count = 56;
-
-void set_result_offset0(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[0] = (uint64_t) data;
-}
-
-void set_result_offset1(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[1] = (uint64_t) data;
-}
-
-void set_result_offset2(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[2] = (uint64_t) data;
-}
-
-void set_result_offset3(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[3] = (uint64_t) data;
-}
-
-void set_result_offset4(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[4] = (uint64_t) data;
-}
-
-void set_result_offset5(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[5] = (uint64_t) data;
-}
-
-void set_result_offset6(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[6] = (uint64_t) data;
-}
-
-void set_result_offset7(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[7] = (uint64_t) data;
-}
-
-void set_result_offset8(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[8] = (uint64_t) data;
-}
-
-void set_result_offset9(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[9] = (uint64_t) data;
-}
-
-void set_result_offset10(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[10] = (uint64_t) data;
-}
-
-void set_result_offset11(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[11] = (uint64_t) data;
-}
-
-void set_result_offset12(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[12] = (uint64_t) data;
-}
-
-void set_result_offset13(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[13] = (uint64_t) data;
-}
-
-void set_result_offset14(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[14] = (uint64_t) data;
-}
-
-void set_result_offset15(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[15] = (uint64_t) data;
-}
-
-void set_result_offset16(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[16] = (uint64_t) data;
-}
-
-void set_result_offset17(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[17] = (uint64_t) data;
-}
-
-void set_result_offset18(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[18] = (uint64_t) data;
-}
-
-void set_result_offset19(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[19] = (uint64_t) data;
-}
-
-void set_result_offset20(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[20] = (uint64_t) data;
-}
-
-void set_result_offset21(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[21] = (uint64_t) data;
-}
-
-void set_result_offset22(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[22] = (uint64_t) data;
-}
-
-void set_result_offset23(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[23] = (uint64_t) data;
-}
-
-void set_result_offset24(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[24] = (uint64_t) data;
-}
-
-void set_result_offset25(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[25] = (uint64_t) data;
-}
-
-void set_result_offset26(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[26] = (uint64_t) data;
-}
-
-void set_result_offset27(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[27] = (uint64_t) data;
-}
-
-void set_result_offset28(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[28] = (uint64_t) data;
-}
-
-void set_result_offset29(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[29] = (uint64_t) data;
-}
-
-void set_result_offset30(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[30] = (uint64_t) data;
-}
-
-void set_result_offset31(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[31] = (uint64_t) data;
-}
-
-void set_result_offset32(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[32] = (uint64_t) data;
-}
-
-void set_result_offset33(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[33] = (uint64_t) data;
-}
-
-void set_result_offset34(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[34] = (uint64_t) data;
-}
-
-void set_result_offset35(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[35] = (uint64_t) data;
-}
-
-void set_result_offset36(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[36] = (uint64_t) data;
-}
-
-void set_result_offset37(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[37] = (uint64_t) data;
-}
-
-void set_result_offset38(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[38] = (uint64_t) data;
-}
-
-void set_result_offset39(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[39] = (uint64_t) data;
-}
-
-void set_result_offset40(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[40] = (uint64_t) data;
-}
-
-void set_result_offset41(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[41] = (uint64_t) data;
-}
-
-void set_result_offset42(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[42] = (uint64_t) data;
-}
-
-void set_result_offset43(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[43] = (uint64_t) data;
-}
-
-void set_result_offset44(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[44] = (uint64_t) data;
-}
-
-void set_result_offset45(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[45] = (uint64_t) data;
-}
-
-void set_result_offset46(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[46] = (uint64_t) data;
-}
-
-void set_result_offset47(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[47] = (uint64_t) data;
-}
-
-void set_result_offset48(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[48] = (uint64_t) data;
-}
-
-void set_result_offset49(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[49] = (uint64_t) data;
-}
-
-void set_result_offset50(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[50] = (uint64_t) data;
-}
-
-void set_result_offset51(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[51] = (uint64_t) data;
-}
-
-void set_result_offset52(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[52] = (uint64_t) data;
-}
-
-void set_result_offset53(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[53] = (uint64_t) data;
-}
-
-void set_result_offset54(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[54] = (uint64_t) data;
-}
-
-void set_result_offset55(GenericPointer ptr, GenericPointer data) {
-    uint64_t* result = (uint64_t *) ptr;
-    result[55] = (uint64_t) data;
-}
-
-static void (*setter_functions[])(GenericPointer, GenericPointer) = {
-    set_result_offset0,
-    set_result_offset1,
-    set_result_offset2,
-    set_result_offset3,
-    set_result_offset4,
-    set_result_offset5,
-    set_result_offset6,
-    set_result_offset7,
-    set_result_offset8,
-    set_result_offset9,
-    set_result_offset10,
-    set_result_offset11,
-    set_result_offset12,
-    set_result_offset13,
-    set_result_offset14,
-    set_result_offset15,
-    set_result_offset16,
-    set_result_offset17,
-    set_result_offset18,
-    set_result_offset19,
-    set_result_offset20,
-    set_result_offset21,
-    set_result_offset22,
-    set_result_offset23,
-    set_result_offset24,
-    set_result_offset25,
-    set_result_offset26,
-    set_result_offset27,
-    set_result_offset28,
-    set_result_offset29,
-    set_result_offset30,
-    set_result_offset31,
-    set_result_offset32,
-    set_result_offset33,
-    set_result_offset34,
-    set_result_offset35,
-    set_result_offset36,
-    set_result_offset37,
-    set_result_offset38,
-    set_result_offset39,
-    set_result_offset40,
-    set_result_offset41,
-    set_result_offset42,
-    set_result_offset43,
-    set_result_offset44,
-    set_result_offset45,
-    set_result_offset46,
-    set_result_offset47,
-    set_result_offset48,
-    set_result_offset49,
-    set_result_offset50,
-    set_result_offset51,
-    set_result_offset52,
-    set_result_offset53,
-    set_result_offset54,
-    set_result_offset55,
-};
-
diff --git a/src/meminfo_option.sh b/src/meminfo_option.sh
new file mode 100644
index 0000000..54a2c6e
--- /dev/null
+++ b/src/meminfo_option.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# SPDX-License-Identifier: GPL-3.0-or-later
+# Copyright (C) 2018-2023 Georges Da Costa <georges.da-costa@irit.fr>
+
+MEMINFO_PATH="/proc/meminfo"
+
+FUNCTION_TEMPLATE="void set_result_offset%s(GenericPointer ptr, GenericPointer data)
+{
+    uint64_t* result = (uint64_t *) ptr;
+    result[%s] = (uint64_t) data;
+}\n\n"
+
+nb_counters=0
+
+echo '#include <inttypes.h>'
+echo "#include <info_reader.h>"
+echo
+
+echo 'static char *memory_counters[] = {'
+while read line; do
+  nb_counters=$(expr $nb_counters + 1)
+  word=$(echo $line | awk '{print $1}')
+  echo "    \"${word::-1}\","
+done <$MEMINFO_PATH
+echo "};"
+echo
+
+echo "#define NB_COUNTERS $nb_counters"
+echo
+
+count=0
+while [ $count -lt $nb_counters ]; do
+  printf "$FUNCTION_TEMPLATE" $count $count
+  count=$(expr $count + 1)
+done
+
+echo "static void (*setter_functions[])(GenericPointer, GenericPointer) = {"
+count=0
+while [ $count -lt $nb_counters ]; do
+  echo "    set_result_offset$count,"
+  count=$(expr $count + 1)
+done
+echo "};"
+echo
+
diff --git a/src/memory_extra.c b/src/memory_counters.c
similarity index 89%
rename from src/memory_extra.c
rename to src/memory_counters.c
index f616870..4572ff0 100644
--- a/src/memory_extra.c
+++ b/src/memory_counters.c
@@ -16,7 +16,7 @@ KeyFinder *build_keyfinder(unsigned int count, unsigned int *indexes) {
   KeyFinder *keys = (KeyFinder *)calloc(count, sizeof(KeyFinder));
   for (unsigned int i = 0; i < count; i++) {
     unsigned int idx = indexes[i];
-    KeyFinder key = {.key = meminfo_words[idx],
+    KeyFinder key = {.key = memory_counters[idx],
                      .delimiter = ":",
                      .copy = long_allocator,
                      .set = setter_functions[i]};
@@ -34,20 +34,20 @@ void memory_list(char *memory_string, unsigned int *count,
     memory_string = NULL;
 
     unsigned int i;
-    for (i = 0; i < meminfo_count; i++) {
-      if (strcmp(meminfo_words[i], token) == 0) {
+    for (i = 0; i < NB_COUNTERS; i++) {
+      if (strcmp(memory_counters[i], token) == 0) {
         (*count)++;
         indexes[*count - 1] = i;
         break;
       }
     }
 
-    if (i == meminfo_count) {
+    if (i == NB_COUNTERS) {
       fprintf(stderr, "Unknown memory counter: %s\n", token);
       exit(EXIT_FAILURE);
     }
 
-    if ((*count) > meminfo_count) {
+    if ((*count) > NB_COUNTERS) {
       fprintf(stderr, "Too much counters, there are probably duplicates\n");
       exit(EXIT_FAILURE);
     }
@@ -61,7 +61,7 @@ int main(int argc, char **argv) {
     exit(EXIT_FAILURE);
   }
 
-  unsigned int indexes[meminfo_count];
+  unsigned int indexes[NB_COUNTERS];
   unsigned int count = 0;
   memory_list(argv[1], &count, indexes);
 
-- 
GitLab