1
+ #include "iostream"
1
2
#include "util.h"
2
3
#include "stdio.h"
3
4
#include "string.h"
4
5
#include "time.h"
5
6
7
+ using namespace std ;
8
+
6
9
static const size_t kvs_pair_size = sizeof (CybsTable );
7
10
8
11
static const size_t kvs_store_size = sizeof (CybsMap );
@@ -55,27 +58,32 @@ static void create_pair(CybsMap *store, const void *key, void *value) {
55
58
if (!store ) {
56
59
return ;
57
60
}
61
+ string keyCopy ( (char * )key );
62
+ string valueCopy ( (char * )value );
58
63
++ store -> length ;
59
- store -> totallength = store -> totallength + (strlen (( const char * ) key ) + strlen (( const char * ) value ) );
64
+ store -> totallength = store -> totallength + (keyCopy . size () ) + valueCopy . size ( );
60
65
resize_pairs (store );
61
66
pair = & store -> pairs [store -> length - 1 ];
62
- pair -> key = (char * ) malloc (strlen ((const char * )key ) + sizeof (char ));
63
- strcpy ((char * )pair -> key , (const char * )key );
67
+ pair -> key = (char * ) malloc (keyCopy .size () + sizeof (char ));
68
+ keyCopy .copy ((char * )pair -> key , keyCopy .size (), 0 );
69
+ ((char * )pair -> key )[keyCopy .size ()]= '\0' ;
64
70
//pair->key = key;
65
71
//pair->value = value;
66
- pair -> value = (char * ) malloc (strlen ((char * )value ) + sizeof (char ));
67
- strcpy ((char * )pair -> value , (const char * )value );
72
+ pair -> value = (char * ) malloc (valueCopy .size () + sizeof (char ));
73
+ valueCopy .copy ((char * )pair -> value , valueCopy .size (), 0 );
74
+ ((char * ) pair -> value )[valueCopy .size ()]= '\0' ;
68
75
sort_pairs (store );
69
76
}
70
77
71
78
static void remove_pair (CybsMap * store , CybsTable * pair ) {
72
79
if ((!store ) || (!pair )) {
73
80
return ;
74
81
}
75
- pair -> key = NULL ;
76
82
sort_pairs (store );
77
83
-- store -> length ;
78
- store -> totallength = store -> totallength - ((strlen ((const char * )pair -> key ) + strlen ((const char * )pair -> value )));
84
+ string pairKeyCopy ((char * )pair -> key );
85
+ string pairKeyValue ((char * )pair -> value );
86
+ store -> totallength = store -> totallength - (pairKeyCopy .size () + pairKeyValue .size ());
79
87
resize_pairs (store );
80
88
}
81
89
@@ -107,12 +115,14 @@ void cybs_destroy_map(CybsMap *store) {
107
115
108
116
char * cybs_strdup ( const char * szStringToDup )
109
117
{
118
+ string szStringToDupCopy (szStringToDup );
110
119
char * szDup
111
- = (char * ) malloc ( strlen ( szStringToDup ) + sizeof ( char ) );
120
+ = (char * ) malloc ( szStringToDupCopy . size ( ) + sizeof ( char ) );
112
121
113
122
if (szDup )
114
123
{
115
- strcpy ( szDup , szStringToDup );
124
+ szStringToDupCopy .copy (szDup , szStringToDupCopy .size (), 0 );
125
+ szDup [szStringToDupCopy .size ()]= '\0' ;
116
126
return ( szDup );
117
127
}
118
128
@@ -125,8 +135,10 @@ void cybs_add(CybsMap *store, const void *key, void *value) {
125
135
if (pair ) {
126
136
if (value ) {
127
137
free (pair -> value );
128
- pair -> value = (char * ) malloc (strlen ((const char * )value ) + sizeof (char ));
129
- strcpy ((char * )pair -> value , (const char * )value );
138
+ string valueCopy ( (char * )value );
139
+ pair -> value = (char * ) malloc (valueCopy .size () + sizeof (char ));
140
+ valueCopy .copy ((char * ) pair -> value , valueCopy .size (), 0 );
141
+ ((char * ) pair -> value )[valueCopy .size ()]= '\0' ;
130
142
} else {
131
143
remove_pair (store , pair );
132
144
}
0 commit comments