summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Brown2011-03-22 18:49:03 +0100
committerMichael Brown2011-03-22 20:55:05 +0100
commitf732fa28c87e76d5627ce593a8078f4124c06173 (patch)
tree35b92f93c920000c9371f39771a61217c0b4a3a5
parent[settings] Use concat_args() in "set" command (diff)
downloadipxe-f732fa28c87e76d5627ce593a8078f4124c06173.tar.gz
ipxe-f732fa28c87e76d5627ce593a8078f4124c06173.tar.xz
ipxe-f732fa28c87e76d5627ce593a8078f4124c06173.zip
[settings] Expose settings_name()
Expose settings_name(), shrink the unnecessarily large static buffer, properly name root settings block, and simplify. Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/core/settings.c14
-rw-r--r--src/include/ipxe/settings.h1
2 files changed, 7 insertions, 8 deletions
diff --git a/src/core/settings.c b/src/core/settings.c
index a080904c5..6b3e74115 100644
--- a/src/core/settings.c
+++ b/src/core/settings.c
@@ -288,22 +288,20 @@ static struct settings * autovivify_child_settings ( struct settings *parent,
}
/**
- * Return settings block name (for debug only)
+ * Return settings block name
*
* @v settings Settings block
* @ret name Settings block name
*/
-static const char * settings_name ( struct settings *settings ) {
- static char buf[64];
+const char * settings_name ( struct settings *settings ) {
+ static char buf[16];
char tmp[ sizeof ( buf ) ];
- int count;
- for ( count = 0 ; settings ; settings = settings->parent ) {
+ for ( buf[2] = buf[0] = 0 ; settings ; settings = settings->parent ) {
memcpy ( tmp, buf, sizeof ( tmp ) );
- snprintf ( buf, sizeof ( buf ), "%s%c%s", settings->name,
- ( count++ ? '.' : '\0' ), tmp );
+ snprintf ( buf, sizeof ( buf ), ".%s%s", settings->name, tmp );
}
- return ( buf + 1 );
+ return ( buf + 2 );
}
/**
diff --git a/src/include/ipxe/settings.h b/src/include/ipxe/settings.h
index b2b63f8ad..5c5416832 100644
--- a/src/include/ipxe/settings.h
+++ b/src/include/ipxe/settings.h
@@ -245,6 +245,7 @@ extern int fetch_uuid_setting ( struct settings *settings,
extern void clear_settings ( struct settings *settings );
extern int setting_cmp ( struct setting *a, struct setting *b );
+extern const char * settings_name ( struct settings *settings );
extern struct settings * find_settings ( const char *name );
extern struct setting * find_setting ( const char *name );