qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 12/20] disas/nanomips: Replace std::string type


From: Richard Henderson
Subject: Re: [PATCH v2 12/20] disas/nanomips: Replace std::string type
Date: Mon, 5 Sep 2022 12:32:30 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0

On 9/5/22 10:55, Milica Lazarevic wrote:
-static std::string save_restore_list(uint64 rt, uint64 count, uint64 gp)
+static char *save_restore_list(uint64 rt, uint64 count, uint64 gp)
  {
-    std::string str;
+    /*
+     * Currently, this file compiles as a cpp file, so the explicit cast here
+     * is necessary. Later, the cast will be removed.
+     */
+    char *str = (char *)g_malloc(200);
+    str[0] = '\0';
for (uint64 counter = 0; counter != count; counter++) {
          bool use_gp = gp && (counter == count - 1);
          uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
-        str += img_format(",%s", GPR(this_rt));
+        strcat(str, img_format(",%s", GPR(this_rt)));
      }
return str;
  }

This would be better written as

    char *reg_list[33];

    assert(count <= 32);
    for (c = 0; c < count; c++) {
        bool use_gp = ...
        uint64 this_rt = ...
        /* glib usage below requires casting away const */
        reg_list[c] = (char *)GPR(this_rt);
    }
    reg_list[count] = NULL;

    return g_strjoinv(",", reg_list);



@@ -716,7 +617,7 @@ static uint64 extract_op_code_value(const uint16 *data, int 
size)
   *      instruction size    - negative is error
   *      disassembly string  - on error will constain error string
   */
-static int Disassemble(const uint16 *data, std::string & dis,
+static int Disassemble(const uint16 *data, char *dis,


I think this interface should be

    char **dis,

so that...

@@ -746,25 +647,26 @@ static int Disassemble(const uint16 *data, std::string & 
dis,
                                   * an ASE attribute and the requested version
                                   * not having that attribute
                                   */
-                                dis = "ASE attribute mismatch";
+                                strcpy(dis, "ASE attribute mismatch");

these become

    *dis = g_strdup("string");

and the usage in nanomips_dis does not assume a fixed sized buffer.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]