[gPXE-devel] [PATCH 5/6] [settings] Export settings_name()

Glenn Brown glenn at myri.com
Tue Jul 6 19:17:41 EDT 2010


Export settings_name(), shrink the unnecessarily large static buffer,
guarantee NUL termination in all cases, properly name root settings
structure, and simplify.

Signed-off-by: Glenn Brown <glenn at myri.com>
---
 src/core/settings.c         |   17 ++++++++---------
 src/include/gpxe/settings.h |    2 ++
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/core/settings.c b/src/core/settings.c
index 52ff0cc..062b14e 100644
--- a/src/core/settings.c
+++ b/src/core/settings.c
@@ -288,22 +288,21 @@ 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 ) - 1, ".%s%s", settings->name,
+			   tmp );
 	}
-	return ( buf + 1 );
+	return ( buf + 2 );
 }
 
 /**
diff --git a/src/include/gpxe/settings.h b/src/include/gpxe/settings.h
index 0abc322..87cb44a 100644
--- a/src/include/gpxe/settings.h
+++ b/src/include/gpxe/settings.h
@@ -239,6 +239,8 @@ extern int storef_setting ( struct settings *settings,
 extern int storef_named_setting ( const char *name, const char *value );
 extern int fetchf_named_setting ( const char *name, char *buf, size_t len );
 
+const char * settings_name ( struct settings *settings );
+
 extern struct setting_type setting_type_string __setting_type;
 extern struct setting_type setting_type_ipv4 __setting_type;
 extern struct setting_type setting_type_int8 __setting_type;
-- 
1.7.0.4



More information about the gPXE-devel mailing list