#include <stdio.h>
#include <stdbool.h>
char *get_ini_value(char *input, char *var_name) {
// skip leading spaces
while(*input == ' ' || *input == '\t') input++;
// find end of var name
while(*input && *var_name) {
if (*input == ';' || *input == '[' || *input != *var_name) {
return NULL;
}
input++;
var_name++;
}
// skip spaces before equal char
while(*input == ' ' || *input == '\t') input++;
// check equal char exists
if (*input != '=') {
return NULL;
}
// skip equal char
input++;
// skip spaces after equal char
while(*input == ' ' || *input == '\t') input++;
// return result
return input;
}
int main(void) {
char *tekst = " var1 = this-is-a-test";
char *val_ptr;
if ((val_ptr = get_ini_value(tekst, "var1")) != NULL) {
printf("value: [%s]\n", val_ptr
); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CgpjaGFyICpnZXRfaW5pX3ZhbHVlKGNoYXIgKmlucHV0LCBjaGFyICp2YXJfbmFtZSkgewoKICAgIC8vIHNraXAgbGVhZGluZyBzcGFjZXMJCgl3aGlsZSgqaW5wdXQgPT0gJyAnIHx8ICppbnB1dCA9PSAnXHQnKSBpbnB1dCsrOwoKCS8vIGZpbmQgZW5kIG9mIHZhciBuYW1lIAoJd2hpbGUoKmlucHV0ICYmICp2YXJfbmFtZSkgewoJCQoJCWlmICgqaW5wdXQgPT0gJzsnIHx8ICppbnB1dCA9PSAnWycgfHwgKmlucHV0ICE9ICp2YXJfbmFtZSkgeyAKCQkJcmV0dXJuIE5VTEw7CgkJfSAKCQkKCQlpbnB1dCsrOwoJCXZhcl9uYW1lKys7Cgl9CgkKCS8vIHNraXAgc3BhY2VzIGJlZm9yZSBlcXVhbCBjaGFyCgl3aGlsZSgqaW5wdXQgPT0gJyAnIHx8ICppbnB1dCA9PSAnXHQnKSBpbnB1dCsrOwoJCgkvLyBjaGVjayBlcXVhbCBjaGFyIGV4aXN0cwoJaWYgKCppbnB1dCAhPSAnPScpIHsKCQlyZXR1cm4gTlVMTDsKCX0KCQoJLy8gc2tpcCBlcXVhbCBjaGFyCiAgICBpbnB1dCsrOwoJCgkvLyBza2lwIHNwYWNlcyBhZnRlciBlcXVhbCBjaGFyCgl3aGlsZSgqaW5wdXQgPT0gJyAnIHx8ICppbnB1dCA9PSAnXHQnKSBpbnB1dCsrOwoJCgkvLyByZXR1cm4gcmVzdWx0CglyZXR1cm4gaW5wdXQ7Cn0KCmludCBtYWluKHZvaWQpIHsKCWNoYXIgKnRla3N0ID0gIiAgdmFyMSA9ICAgdGhpcy1pcy1hLXRlc3QiOwoJY2hhciAqdmFsX3B0cjsKCWlmICgodmFsX3B0ciA9IGdldF9pbmlfdmFsdWUodGVrc3QsICJ2YXIxIikpICE9IE5VTEwpIHsKCQlwcmludGYoInZhbHVlOiBbJXNdXG4iLCB2YWxfcHRyKTsKCX0KCXJldHVybiAwOwp9Cg==