first changes to get a successfully compiled version of capstone on VS2012
diff --git a/cs.c b/cs.c
index 3b4a02e..e36c276 100644
--- a/cs.c
+++ b/cs.c
@@ -1,5 +1,15 @@
/* Capstone Disassembly Engine */
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
+#define _CRT_SECURE_NO_WARNINGS
+
+#define CAPSTONE_HAS_ARM
+#define CAPSTONE_HAS_ARM64
+#define CAPSTONE_HAS_MIPS
+#define CAPSTONE_HAS_POWERPC
+#define CAPSTONE_HAS_SPARC
+#define CAPSTONE_HAS_SYSZ
+#define CAPSTONE_HAS_X86
+#define USE_SYS_DYN_MEM
#include <stddef.h>
#include <stdio.h>
@@ -127,10 +137,11 @@
cs_err cs_errno(csh handle)
{
+ struct cs_struct *ud = NULL;
if (!handle)
return CS_ERR_CSH;
- struct cs_struct *ud = (struct cs_struct *)(uintptr_t)handle;
+ ud = (struct cs_struct *)(uintptr_t)handle;
return ud->errnum;
}
@@ -169,6 +180,8 @@
cs_err cs_open(cs_arch arch, cs_mode mode, csh *handle)
{
+ cs_err err;
+ struct cs_struct *ud = NULL;
if (!cs_mem_malloc || !cs_mem_calloc || !cs_mem_realloc || !cs_mem_free || !cs_vsnprintf)
// Error: before cs_open(), dynamic memory management must be initialized
// with cs_option(CS_OPT_MEM)
@@ -177,8 +190,6 @@
archs_enable();
if (arch < CS_ARCH_MAX && arch_init[arch]) {
- struct cs_struct *ud;
-
ud = cs_mem_calloc(1, sizeof(*ud));
if (!ud) {
// memory insufficient
@@ -195,7 +206,7 @@
// default skipdata setup
ud->skipdata_setup.mnemonic = SKIPDATA_MNEM;
- cs_err err = arch_init[ud->arch](ud);
+ err = arch_init[ud->arch](ud);
if (err) {
cs_mem_free(ud);
*handle = 0;
@@ -213,11 +224,12 @@
cs_err cs_close(csh *handle)
{
+ struct cs_struct *ud = NULL;
if (*handle == 0)
// invalid handle
return CS_ERR_CSH;
- struct cs_struct *ud = (struct cs_struct *)(*handle);
+ ud = (struct cs_struct *)(*handle);
if (ud->printer_info)
cs_mem_free(ud->printer_info);
@@ -239,13 +251,14 @@
static void fill_insn(struct cs_struct *handle, cs_insn *insn, char *buffer, MCInst *mci,
PostPrinter_t postprinter, const uint8_t *code)
{
+ char *sp = NULL;
if (handle->detail) {
// avoiding copy insn->detail
memcpy(insn, &mci->flat_insn, sizeof(*insn) - sizeof(insn->detail));
// NOTE: copy details in 2 chunks, since union is always put at address divisible by 8
// copy from @regs_read until @arm
- memcpy(insn->detail, (void *)(&(mci->flat_insn)) + offsetof(cs_insn_flat, regs_read),
+ memcpy(insn->detail, (void *)((uintptr_t)(&(mci->flat_insn)) + offsetof(cs_insn_flat, regs_read)),
offsetof(cs_detail, arm) - offsetof(cs_detail, regs_read));
// then copy from @arm until end
memcpy((void *)((uintptr_t)(insn->detail) + offsetof(cs_detail, arm)),
@@ -274,7 +287,7 @@
#ifndef CAPSTONE_DIET
// fill in mnemonic & operands
// find first space or tab
- char *sp = buffer;
+ sp = buffer;
for (sp = buffer; *sp; sp++) {
if (*sp == ' '||*sp == '\t')
break;
@@ -329,6 +342,7 @@
cs_err cs_option(csh ud, cs_opt_type type, size_t value)
{
+ struct cs_struct *handle = NULL;
archs_enable();
// cs_option() can be called with NULL handle just for CS_OPT_MEM
@@ -345,7 +359,7 @@
return CS_ERR_OK;
}
- struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+ handle = (struct cs_struct *)(uintptr_t)ud;
if (!handle)
return CS_ERR_CSH;
@@ -599,10 +613,11 @@
bool cs_insn_group(csh ud, cs_insn *insn, unsigned int group_id)
{
+ struct cs_struct *handle = NULL;
if (!ud)
return false;
- struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+ handle = (struct cs_struct *)(uintptr_t)ud;
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
@@ -624,10 +639,11 @@
bool cs_reg_read(csh ud, cs_insn *insn, unsigned int reg_id)
{
+ struct cs_struct *handle = NULL;
if (!ud)
return false;
- struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+ handle = (struct cs_struct *)(uintptr_t)ud;
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
@@ -649,10 +665,11 @@
bool cs_reg_write(csh ud, cs_insn *insn, unsigned int reg_id)
{
+ struct cs_struct *handle = NULL;
if (!ud)
return false;
- struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+ handle = (struct cs_struct *)(uintptr_t)ud;
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
@@ -674,10 +691,12 @@
int cs_op_count(csh ud, cs_insn *insn, unsigned int op_type)
{
+ struct cs_struct *handle = NULL;
+ unsigned int count = 0, i = 0;
if (!ud)
return -1;
- struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+ handle = (struct cs_struct *)(uintptr_t)ud;
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
@@ -694,8 +713,6 @@
return -1;
}
- unsigned int count = 0, i;
-
handle->errnum = CS_ERR_OK;
switch (handle->arch) {
@@ -745,10 +762,12 @@
int cs_op_index(csh ud, cs_insn *insn, unsigned int op_type,
unsigned int post)
{
+ struct cs_struct *handle = NULL;
+ unsigned int count = 0, i = 0;
if (!ud)
return -1;
- struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+ handle = (struct cs_struct *)(uintptr_t)ud;
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
@@ -765,8 +784,6 @@
return -1;
}
- unsigned int count = 0, i;
-
handle->errnum = CS_ERR_OK;
switch (handle->arch) {