Changeset 5661:efd1ca5963ee in roaraudio
- Timestamp:
- 09/22/12 22:30:52 (12 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r5660 r5661 1 v. 1.0beta7 - ? 2 * Improved kv API. 3 1 4 v. 1.0beta6 - Fri Sep 21 2012 18:03 CEST 2 5 Prereleases: 0: Mon Sep 17 2012 20:42 CEST -
include/libroar/keyval.h
r5552 r5661 54 54 ssize_t roar_keyval_split (struct roar_keyval ** kv, char * str, const char * fdel, const char * kdel, int quotes); 55 55 56 void * roar_keyval_copy(struct roar_keyval ** copy, const struct roar_keyval * src, ssize_t len); 57 56 58 #endif 57 59 -
libroar/keyval.c
r5650 r5661 163 163 } 164 164 165 static inline void _copy_str(char ** dst, const char * src) { 166 for (; *src; src++, (*dst)++) **dst = *src; 167 *((*dst)++) = 0; 168 } 169 170 void * roar_keyval_copy(struct roar_keyval ** copy, const struct roar_keyval * src, ssize_t len) { 171 size_t buflen = 0; 172 ssize_t i; 173 void * ret; 174 char * p; 175 struct roar_keyval * c; 176 177 // TODO: optimize this. 178 if ( len == -1 ) { 179 len = 0; 180 for (i = 0; src[i].key != NULL || src[i].value != NULL; i++) 181 len++; 182 } 183 184 for (i = 0; i < len; i++) { 185 if ( src[i].key != NULL ) 186 buflen += roar_mm_strlen(src[i].key) + 1; 187 if ( src[i].value != NULL ) 188 buflen += roar_mm_strlen(src[i].value) + 1; 189 } 190 191 c = roar_mm_malloc(len * sizeof(struct roar_keyval)); 192 if ( c == NULL ) 193 return NULL; 194 195 memset(c, 0, len * sizeof(struct roar_keyval)); 196 197 ret = roar_mm_malloc(buflen); 198 if ( ret == NULL ) 199 return NULL; 200 201 memset(ret, 0, buflen); 202 203 p = ret; 204 205 for (i = 0; i < len; i++) { 206 if ( src[i].key == NULL ) { 207 c[i].key = NULL; 208 } else { 209 c[i].key = p; 210 _copy_str(&p, src[i].key); 211 } 212 213 if ( src[i].value == NULL ) { 214 c[i].value = NULL; 215 } else { 216 c[i].value = p; 217 _copy_str(&p, src[i].value); 218 } 219 } 220 221 *copy = c; 222 return ret; 223 } 224 165 225 //ll -
libroar/plugincontainer.c
r5504 r5661 87 87 } 88 88 89 static inline void _copy_str(char ** dst, const char * src) {90 for (; *src; src++, (*dst)++) **dst = *src;91 *((*dst)++) = 0;92 }93 94 static void * _copy_kv(struct roar_keyval ** copy, struct roar_keyval * src, size_t len) {95 size_t buflen = 0;96 size_t i;97 void * ret;98 char * p;99 struct roar_keyval * c;100 101 for (i = 0; i < len; i++) {102 if ( src[i].key != NULL )103 buflen += roar_mm_strlen(src[i].key) + 1;104 if ( src[i].value != NULL )105 buflen += roar_mm_strlen(src[i].value) + 1;106 }107 108 c = roar_mm_malloc(len * sizeof(struct roar_keyval));109 if ( c == NULL )110 return NULL;111 112 memset(c, 0, len * sizeof(struct roar_keyval));113 114 ret = roar_mm_malloc(buflen);115 if ( ret == NULL )116 return NULL;117 118 memset(ret, 0, buflen);119 120 p = ret;121 122 for (i = 0; i < len; i++) {123 if ( src[i].key == NULL ) {124 c[i].key = NULL;125 } else {126 c[i].key = p;127 _copy_str(&p, src[i].key);128 }129 130 if ( src[i].value == NULL ) {131 c[i].value = NULL;132 } else {133 c[i].value = p;134 _copy_str(&p, src[i].value);135 }136 }137 138 *copy = c;139 return ret;140 }141 142 89 static struct roar_dl_librarypara * _copy_para(struct roar_dl_librarypara * para, struct roar_plugincontainer * cont) { 143 90 struct roar_dl_librarypara * ret = NULL; … … 153 100 if ( para->argc && para->argv != NULL ) { 154 101 ret->argc = para->argc; 155 ret->args_store = _copy_kv(&(ret->argv), para->argv, para->argc);102 ret->args_store = roar_keyval_copy(&(ret->argv), para->argv, para->argc); 156 103 if ( ret->args_store == NULL ) { 157 104 err = roar_error;
Note: See TracChangeset
for help on using the changeset viewer.