summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorMichael Brown2013-07-18 15:49:06 +0200
committerMichael Brown2013-07-19 16:29:23 +0200
commit44fd30904467e9c99a42b0e8fe2456e7d43a8e0e (patch)
treec47f9f2b523fc2f9a53dd093c3e7f5ab958f6611 /src/usr
parent[settings] Eliminate call to fetchf_named_setting() in expand_settings() (diff)
downloadipxe-44fd30904467e9c99a42b0e8fe2456e7d43a8e0e.tar.gz
ipxe-44fd30904467e9c99a42b0e8fe2456e7d43a8e0e.tar.xz
ipxe-44fd30904467e9c99a42b0e8fe2456e7d43a8e0e.zip
[settings] Eliminate call to store_named_setting() in nslookup.c
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/nslookup.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/usr/nslookup.c b/src/usr/nslookup.c
index c931ec5a..cb6d8d2b 100644
--- a/src/usr/nslookup.c
+++ b/src/usr/nslookup.c
@@ -46,7 +46,7 @@ struct nslookup {
struct interface resolver;
/** Setting name */
- const char *setting_name;
+ char *setting_name;
};
/**
@@ -71,7 +71,9 @@ static void nslookup_close ( struct nslookup *nslookup, int rc ) {
static void nslookup_resolv_done ( struct nslookup *nslookup,
struct sockaddr *sa ) {
struct sockaddr_in *sin;
- struct setting_type *type;
+ struct setting_type *default_type;
+ struct settings *settings;
+ struct setting setting;
void *data;
size_t len;
int rc;
@@ -82,16 +84,25 @@ static void nslookup_resolv_done ( struct nslookup *nslookup,
sin = ( ( struct sockaddr_in * ) sa );
data = &sin->sin_addr;
len = sizeof ( sin->sin_addr );
- type = &setting_type_ipv4;
+ default_type = &setting_type_ipv4;
break;
default:
rc = -ENOTSUP;
goto err;
}
- /* Save in specified setting */
- if ( ( rc = store_named_setting ( nslookup->setting_name, type,
- data, len ) ) != 0 )
+ /* Parse specified setting name */
+ if ( ( rc = parse_setting_name ( nslookup->setting_name,
+ autovivify_child_settings, &settings,
+ &setting ) ) != 0 )
+ goto err;
+
+ /* Apply default type if necessary */
+ if ( ! setting.type )
+ setting.type = default_type;
+
+ /* Store in specified setting */
+ if ( ( rc = store_setting ( settings, &setting, data, len ) ) != 0 )
goto err;
err: