From 63320f6a8cd388a07531e731c7ce3161bb2ed8c7 Mon Sep 17 00:00:00 2001
From: donker <donker@astron.nl>
Date: Thu, 7 Oct 2021 22:08:00 +0200
Subject: [PATCH] repair bug in reading in mmap

---
 src/tools/mmap.cpp | 46 +++++++++++++++++-----------------------------
 1 file changed, 17 insertions(+), 29 deletions(-)

diff --git a/src/tools/mmap.cpp b/src/tools/mmap.cpp
index 0363e98b..ef44e520 100644
--- a/src/tools/mmap.cpp
+++ b/src/tools/mmap.cpp
@@ -121,7 +121,7 @@ CMMap mmap_to_regmap(istringstream& iss)
     string val_str;
     bool same_mask;
     bool same_field_name;
-    // char sep;
+    char sep;
 
     iss.getline(line, sizeof(line));
     iss.getline(line, sizeof(line));
@@ -188,55 +188,43 @@ CMMap mmap_to_regmap(istringstream& iss)
         }
 
         /* Code to remove sscanf */
-        // strs >> mm_mask_hi;
-        // strs >> sep;
-        // strs >> mm_mask_lo;
-        strs >> val_str;  // get mm_mask hi/lo
-        sscanf(val_str.c_str(), "%d:%d", &mm_mask_hi, &mm_mask_lo);
+        strs >> mm_mask_hi;
+        strs >> sep;
+        strs >> mm_mask_lo;
         mask = 0;
         for (int i=mm_mask_lo; i<=mm_mask_hi; i++) {
-            mask |= (1<<i);
+            mask |= (1 << i);
         }
         if (!same_mask) {
             mm_info.mm_mask = mask;
         }
         mm_info.shift = mm_mask_lo;
         
-        /* Code to remove sscanf */ 
-        // if (strs.peek() != "-") {
-        //     sep = strs.get()
-        //     mm_info.user_mask = mm_info.mm_mask;
-        //     mm_info.span = mm_info.n_fields;
-        // }
-        // else {
-        //     strs >> user_mask_hi;
-        //     strs >> sep;
-        //     strs >> user_mask_lo;
-        //     mask = 0;
-        //     for (int i=mm_mask_lo; i<=mm_mask_hi; i++) {
-        //         mask |= (1<<i);
-        //     }
-        //     mm_info.user_mask = mask;
-        //     mm_info.span = (uint)(((user_mask_hi - user_mask_lo + 1) * mm_info.n_fields) / (mm_mask_hi - mm_mask_lo + 1));
-        // }
-        strs >> val_str;  // get user_mask hi/lo
-        uint32_t span;
+        strs >> val_str;  // get user_mask
         if (val_str != "-") {
-            sscanf(val_str.c_str(), "%d:%d", &user_mask_hi, &user_mask_lo);
+            stringstream ss(val_str);
+            ss >> user_mask_hi;
+            ss >> sep;
+            ss >> user_mask_lo;
             mask = 0;
             for (int i=mm_mask_lo; i<=mm_mask_hi; i++) {
                 mask |= (1<<i);
             }
             mm_info.user_mask = mask;
-            span = (uint)(((user_mask_hi - user_mask_lo + 1) * mm_info.n_fields) / (mm_mask_hi - mm_mask_lo + 1));
         }
         else {
             mm_info.user_mask = mm_info.mm_mask;
+        }
+
+        uint32_t span;
+        if (mm_info.radix == "char8") {
+            span = mm_info.n_fields / sizeof(uint32_t);
+        }
+        else {
             span = mm_info.n_fields;
         }
         mm_info.span += span;
 
-
         strs >> val_str;  // get peripheral_span
         if (val_str != "-") {
             if (mm_info.n_peripherals > 1 || mm_info.n_ports > 1) {
-- 
GitLab