[settings] Rewrite unrelicensable portions of settings.c

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2015-03-03 00:41:39 +00:00
parent 0af3d14a23
commit 70124dd3be

View File

@@ -15,9 +15,13 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA. * 02110-1301, USA.
*
* You can also choose to distribute this program under the terms of
* the Unmodified Binary Distribution Licence (as given in the file
* COPYING.UBDL), provided that you have satisfied its requirements.
*/ */
FILE_LICENCE ( GPL2_OR_LATER ); FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h> #include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
@@ -337,17 +341,20 @@ struct settings * autovivify_child_settings ( struct settings *parent,
*/ */
const char * settings_name ( struct settings *settings ) { const char * settings_name ( struct settings *settings ) {
static char buf[16]; static char buf[16];
char tmp[ sizeof ( buf ) ]; char tmp[ 1 /* '.' */ + sizeof ( buf ) ];
/* Find target settings block */ /* Find target settings block */
settings = settings_target ( settings ); settings = settings_target ( settings );
/* Construct name */ /* Construct name */
for ( buf[2] = buf[0] = 0 ; settings ; settings = settings->parent ) { buf[0] = '\0';
memcpy ( tmp, buf, sizeof ( tmp ) ); tmp[0] = '\0';
snprintf ( buf, sizeof ( buf ), ".%s%s", settings->name, tmp ); for ( ; settings->parent ; settings = settings->parent ) {
memcpy ( ( tmp + 1 ), buf, ( sizeof ( tmp ) - 1 ) );
snprintf ( buf, sizeof ( buf ), "%s%s", settings->name, tmp );
tmp[0] = '.';
} }
return ( buf + 2 ); return buf;
} }
/** /**