Revision 2b56cb87 libcacard/vcard_emul_nss.c
b/libcacard/vcard_emul_nss.c | ||
---|---|---|
1055 | 1055 |
/* |
1056 | 1056 |
* Silly little functions to help parsing our argument string |
1057 | 1057 |
*/ |
1058 |
static char * |
|
1059 |
copy_string(const char *str, int str_len) |
|
1060 |
{ |
|
1061 |
char *new_str; |
|
1062 |
|
|
1063 |
new_str = qemu_malloc(str_len+1); |
|
1064 |
memcpy(new_str, str, str_len); |
|
1065 |
new_str[str_len] = 0; |
|
1066 |
return new_str; |
|
1067 |
} |
|
1068 |
|
|
1069 | 1058 |
static int |
1070 | 1059 |
count_tokens(const char *str, char token, char token_end) |
1071 | 1060 |
{ |
... | ... | |
1184 | 1173 |
} |
1185 | 1174 |
opts->vreader = vreaderOpt; |
1186 | 1175 |
vreaderOpt = &vreaderOpt[opts->vreader_count]; |
1187 |
vreaderOpt->name = copy_string(name, name_length);
|
|
1188 |
vreaderOpt->vname = copy_string(vname, vname_length);
|
|
1176 |
vreaderOpt->name = qemu_strndup(name, name_length);
|
|
1177 |
vreaderOpt->vname = qemu_strndup(vname, vname_length);
|
|
1189 | 1178 |
vreaderOpt->card_type = type; |
1190 | 1179 |
vreaderOpt->type_params = |
1191 |
copy_string(type_params, type_params_length);
|
|
1180 |
qemu_strndup(type_params, type_params_length);
|
|
1192 | 1181 |
count = count_tokens(args, ',', ')') + 1; |
1193 | 1182 |
vreaderOpt->cert_count = count; |
1194 | 1183 |
vreaderOpt->cert_name = (char **)qemu_malloc(count*sizeof(char *)); |
1195 | 1184 |
for (i = 0; i < count; i++) { |
1196 | 1185 |
const char *cert = args; |
1197 | 1186 |
args = strpbrk(args, ",)"); |
1198 |
vreaderOpt->cert_name[i] = copy_string(cert, args - cert);
|
|
1187 |
vreaderOpt->cert_name[i] = qemu_strndup(cert, args - cert);
|
|
1199 | 1188 |
args = strip(args+1); |
1200 | 1189 |
} |
1201 | 1190 |
if (*args == ')') { |
... | ... | |
1222 | 1211 |
args = strip(args+10); |
1223 | 1212 |
params = args; |
1224 | 1213 |
args = find_blank(args); |
1225 |
opts->hw_type_params = copy_string(params, args-params);
|
|
1214 |
opts->hw_type_params = qemu_strndup(params, args-params);
|
|
1226 | 1215 |
/* db="/data/base/path" */ |
1227 | 1216 |
} else if (strncmp(args, "db=", 3) == 0) { |
1228 | 1217 |
const char *db; |
... | ... | |
1233 | 1222 |
args++; |
1234 | 1223 |
db = args; |
1235 | 1224 |
args = strpbrk(args, "\"\n"); |
1236 |
opts->nss_db = copy_string(db, args-db);
|
|
1225 |
opts->nss_db = qemu_strndup(db, args-db);
|
|
1237 | 1226 |
if (*args != 0) { |
1238 | 1227 |
args++; |
1239 | 1228 |
} |
Also available in: Unified diff