replace strdup() with our cs_strdup(), which call cs_mem_malloc() internally
diff --git a/arch/AArch64/AArch64BaseInfo.c b/arch/AArch64/AArch64BaseInfo.c
index 29793da..510813f 100644
--- a/arch/AArch64/AArch64BaseInfo.c
+++ b/arch/AArch64/AArch64BaseInfo.c
@@ -39,7 +39,7 @@
// return true if s1 == lower(f2), and false otherwise
static bool compare_lower_str(char *s1, char *s2)
{
- char *lower = strdup(s2), *c;
+ char *lower = cs_strdup(s2), *c;
for (c = lower; *c; c++)
*c = tolower((int) *c);
@@ -85,7 +85,7 @@
if (isNeg) *--BufPtr = '-'; // Add negative sign...
- char *result = strdup(BufPtr);
+ char *result = cs_strdup(BufPtr);
return result;
}
diff --git a/arch/AArch64/AArch64GenAsmWriter.inc b/arch/AArch64/AArch64GenAsmWriter.inc
index 2f460c4..fcf9e92 100644
--- a/arch/AArch64/AArch64GenAsmWriter.inc
+++ b/arch/AArch64/AArch64GenAsmWriter.inc
@@ -11308,7 +11308,7 @@
return false;
}
- char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+ char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
AsmMnem = tmp;
AsmOps = strchr(tmp, ' ');
if (AsmOps) {
diff --git a/arch/AArch64/AArch64InstPrinter.c b/arch/AArch64/AArch64InstPrinter.c
index 89093f0..6a2a3ed 100644
--- a/arch/AArch64/AArch64InstPrinter.c
+++ b/arch/AArch64/AArch64InstPrinter.c
@@ -567,7 +567,7 @@
static void printVPRRegister(MCInst *MI, unsigned OpNo, SStream *O)
{
unsigned Reg = MCOperand_getReg(MCInst_getOperand(MI, OpNo));
- char *Name = strdup(getRegisterName(Reg));
+ char *Name = cs_strdup(getRegisterName(Reg));
Name[0] = 'v';
SStream_concat(O, "%s", Name);
cs_mem_free(Name);
@@ -780,7 +780,7 @@
unsigned SubRegIdx = IsVec64 ? AArch64_dsub_0 : AArch64_qsub_0;
unsigned I;
for (I = 0; I < Count; I++) {
- char *Name = strdup(getRegisterName(MCRegisterInfo_getSubReg(MRI, Reg, SubRegIdx++)));
+ char *Name = cs_strdup(getRegisterName(MCRegisterInfo_getSubReg(MRI, Reg, SubRegIdx++)));
Name[0] = 'v';
SStream_concat(O, "%s%s", Name, LayoutStr);
if (I != Count - 1)
@@ -788,7 +788,7 @@
cs_mem_free(Name);
}
} else { // Print the register directly when NumVecs is 1.
- char *Name = strdup(getRegisterName(Reg));
+ char *Name = cs_strdup(getRegisterName(Reg));
Name[0] = 'v';
SStream_concat(O, "%s%s", Name, LayoutStr);
cs_mem_free(Name);
@@ -812,7 +812,7 @@
void AArch64_printInst(MCInst *MI, SStream *O, void *Info)
{
if (printAliasInstr(MI, O, Info)) {
- char *mnem = strdup(O->buffer);
+ char *mnem = cs_strdup(O->buffer);
char *tab = strchr(mnem, '\t');
if (tab) {
*tab = '\0';
diff --git a/arch/ARM/ARMGenAsmWriter.inc b/arch/ARM/ARMGenAsmWriter.inc
index e086d10..3005b1c 100644
--- a/arch/ARM/ARMGenAsmWriter.inc
+++ b/arch/ARM/ARMGenAsmWriter.inc
@@ -8694,7 +8694,7 @@
return false;
}
- char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+ char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
AsmMnem = tmp;
AsmOps = strchr(tmp, ' ');
if (AsmOps) {
diff --git a/arch/Mips/MipsGenAsmWriter.inc b/arch/Mips/MipsGenAsmWriter.inc
index e23caf7..043123e 100644
--- a/arch/Mips/MipsGenAsmWriter.inc
+++ b/arch/Mips/MipsGenAsmWriter.inc
@@ -4562,7 +4562,7 @@
return false;
}
- char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+ char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
AsmMnem = tmp;
AsmOps = strchr(tmp, ' ');
if (AsmOps) {
diff --git a/arch/Mips/MipsInstPrinter.c b/arch/Mips/MipsInstPrinter.c
index 8ed093d..288727e 100644
--- a/arch/Mips/MipsInstPrinter.c
+++ b/arch/Mips/MipsInstPrinter.c
@@ -199,7 +199,7 @@
printInstruction(MI, O, NULL);
else {
// fixup instruction id due to the change in alias instruction
- char *mnem = strdup(O->buffer);
+ char *mnem = cs_strdup(O->buffer);
char *tab = strchr(mnem, '\t');
if (tab)
*tab = '\0';
diff --git a/arch/PowerPC/PPCGenAsmWriter.inc b/arch/PowerPC/PPCGenAsmWriter.inc
index a6aa96a..c4b20d6 100644
--- a/arch/PowerPC/PPCGenAsmWriter.inc
+++ b/arch/PowerPC/PPCGenAsmWriter.inc
@@ -3456,7 +3456,7 @@
return false;
}
- char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+ char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
AsmMnem = tmp;
AsmOps = strchr(tmp, ' ');
if (AsmOps) {
diff --git a/arch/X86/X86ATTInstPrinter.c b/arch/X86/X86ATTInstPrinter.c
index 2c5bbd7..f9613d1 100644
--- a/arch/X86/X86ATTInstPrinter.c
+++ b/arch/X86/X86ATTInstPrinter.c
@@ -447,7 +447,7 @@
// Try to print any aliases first.
if (printAliasInstr(MI, OS)) {
- char *mnem = strdup(OS->buffer);
+ char *mnem = cs_strdup(OS->buffer);
char *tab = strchr(mnem, '\t');
if (tab)
*tab = '\0';
diff --git a/arch/X86/X86GenAsmWriter.inc b/arch/X86/X86GenAsmWriter.inc
index 20adc60..2470c5a 100644
--- a/arch/X86/X86GenAsmWriter.inc
+++ b/arch/X86/X86GenAsmWriter.inc
@@ -13374,7 +13374,7 @@
return false;
}
- char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+ char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
AsmMnem = tmp;
AsmOps = strchr(tmp, ' ');
if (AsmOps) {
diff --git a/arch/X86/X86GenAsmWriter1.inc b/arch/X86/X86GenAsmWriter1.inc
index 70c6893..e822366 100644
--- a/arch/X86/X86GenAsmWriter1.inc
+++ b/arch/X86/X86GenAsmWriter1.inc
@@ -12863,7 +12863,7 @@
return false;
}
- char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+ char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
AsmMnem = tmp;
AsmOps = strchr(tmp, ' ');
if (AsmOps) {
diff --git a/arch/X86/X86IntelInstPrinter.c b/arch/X86/X86IntelInstPrinter.c
index 053e2dd..3d09939 100644
--- a/arch/X86/X86IntelInstPrinter.c
+++ b/arch/X86/X86IntelInstPrinter.c
@@ -224,7 +224,7 @@
// O << "\tlock\n";
if (printAliasInstr(MI, O)) {
- char *mnem = strdup(O->buffer);
+ char *mnem = cs_strdup(O->buffer);
char *tab = strchr(mnem, '\t');
if (tab)
*tab = '\0';
diff --git a/utils.c b/utils.c
index 87750ce..44f12f2 100644
--- a/utils.c
+++ b/utils.c
@@ -86,3 +86,14 @@
return c;
}
+
+char *cs_strdup(const char *str)
+{
+ size_t len = strlen(str)+ 1;
+ void *new = cs_mem_malloc(len);
+
+ if (new == NULL)
+ return NULL;
+
+ return (char *)memmove(new, str, len);
+}
diff --git a/utils.h b/utils.h
index 8df745e..9b36ed9 100644
--- a/utils.h
+++ b/utils.h
@@ -49,5 +49,7 @@
#define ARR_SIZE(a) (sizeof(a)/sizeof(a[0]))
+char *cs_strdup(const char *str);
+
#endif