|
@@ -46,7 +46,7 @@ struct nslookup {
|
46
|
46
|
struct interface resolver;
|
47
|
47
|
|
48
|
48
|
/** Setting name */
|
49
|
|
- const char *setting_name;
|
|
49
|
+ char *setting_name;
|
50
|
50
|
};
|
51
|
51
|
|
52
|
52
|
/**
|
|
@@ -71,7 +71,9 @@ static void nslookup_close ( struct nslookup *nslookup, int rc ) {
|
71
|
71
|
static void nslookup_resolv_done ( struct nslookup *nslookup,
|
72
|
72
|
struct sockaddr *sa ) {
|
73
|
73
|
struct sockaddr_in *sin;
|
74
|
|
- struct setting_type *type;
|
|
74
|
+ struct setting_type *default_type;
|
|
75
|
+ struct settings *settings;
|
|
76
|
+ struct setting setting;
|
75
|
77
|
void *data;
|
76
|
78
|
size_t len;
|
77
|
79
|
int rc;
|
|
@@ -82,16 +84,25 @@ static void nslookup_resolv_done ( struct nslookup *nslookup,
|
82
|
84
|
sin = ( ( struct sockaddr_in * ) sa );
|
83
|
85
|
data = &sin->sin_addr;
|
84
|
86
|
len = sizeof ( sin->sin_addr );
|
85
|
|
- type = &setting_type_ipv4;
|
|
87
|
+ default_type = &setting_type_ipv4;
|
86
|
88
|
break;
|
87
|
89
|
default:
|
88
|
90
|
rc = -ENOTSUP;
|
89
|
91
|
goto err;
|
90
|
92
|
}
|
91
|
93
|
|
92
|
|
- /* Save in specified setting */
|
93
|
|
- if ( ( rc = store_named_setting ( nslookup->setting_name, type,
|
94
|
|
- data, len ) ) != 0 )
|
|
94
|
+ /* Parse specified setting name */
|
|
95
|
+ if ( ( rc = parse_setting_name ( nslookup->setting_name,
|
|
96
|
+ autovivify_child_settings, &settings,
|
|
97
|
+ &setting ) ) != 0 )
|
|
98
|
+ goto err;
|
|
99
|
+
|
|
100
|
+ /* Apply default type if necessary */
|
|
101
|
+ if ( ! setting.type )
|
|
102
|
+ setting.type = default_type;
|
|
103
|
+
|
|
104
|
+ /* Store in specified setting */
|
|
105
|
+ if ( ( rc = store_setting ( settings, &setting, data, len ) ) != 0 )
|
95
|
106
|
goto err;
|
96
|
107
|
|
97
|
108
|
err:
|