blob: 9f7eb38b658e3fb10f8b9d35f8376d7eb98c0be3 [file] [log] [blame]
Nguyen Anh Quynh6023ef72014-04-29 11:21:04 +08001/* Capstone Disassembly Engine */
2/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08003
4#include <stdint.h>
5#include <stdarg.h>
6#include <stdio.h>
Nguyen Anh Quynhb76233c2014-06-04 18:31:02 +08007#include <string.h>
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08008
9#include "SStream.h"
Nguyen Anh Quynhedeeb042014-01-15 20:44:03 +080010#include "cs_priv.h"
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080011
Nguyen Anh Quynh476d5ad2014-06-17 15:09:59 +080012#ifdef _MSC_VER
13#pragma warning(disable: 4996) // disable MSVC's warning on strcpy()
14#endif
15
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080016void SStream_Init(SStream *ss)
17{
18 ss->index = 0;
19 ss->buffer[0] = '\0';
20}
21
Nguyen Anh Quynhb76233c2014-06-04 18:31:02 +080022void SStream_concat0(SStream *ss, char *s)
23{
24#ifndef CAPSTONE_DIET
25 strcpy(ss->buffer + ss->index, s);
26 ss->index += strlen(s);
27#endif
28}
29
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080030void SStream_concat(SStream *ss, const char *fmt, ...)
31{
Nguyen Anh Quynhfc83a432014-02-22 23:26:27 +080032#ifndef CAPSTONE_DIET
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080033 va_list ap;
Nguyen Anh Quynhbb0744d2014-05-12 13:41:49 +080034 int ret;
35
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080036 va_start(ap, fmt);
Axel 0vercl0k Souchet779d4c72014-05-08 23:44:49 +010037 ret = cs_vsnprintf(ss->buffer + ss->index, sizeof(ss->buffer) - (ss->index + 1), fmt, ap);
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080038 va_end(ap);
39 ss->index += ret;
Nguyen Anh Quynhfc83a432014-02-22 23:26:27 +080040#endif
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080041}
42
43/*
44 int main()
45 {
46 SStream ss;
47 int64_t i;
48
49 SStream_Init(&ss);
50
51 SStream_concat(&ss, "hello ");
52 SStream_concat(&ss, "%d - 0x%x", 200, 16);
53
54 i = 123;
55 SStream_concat(&ss, " + %ld", i);
56 SStream_concat(&ss, "%s", "haaaaa");
57
58 printf("%s\n", ss.buffer);
59
60 return 0;
61 }
62 */