]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Rewrite unrelicensable portions of settings.c
authorMichael Brown <mcb30@ipxe.org>
Tue, 3 Mar 2015 00:41:39 +0000 (00:41 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 3 Mar 2015 00:42:25 +0000 (00:42 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/settings.c

index 85d95e6ebfbf6ceb81973e69a2cdb68bc23f1adb..bd242f6b6fc5ae4ae208b82dc008b3656509350e 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  * 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 <stdlib.h>
@@ -337,17 +341,20 @@ struct settings * autovivify_child_settings ( struct settings *parent,
  */
 const char * settings_name ( struct settings *settings ) {
        static char buf[16];
-       char tmp[ sizeof ( buf ) ];
+       char tmp[ 1 /* '.' */ + sizeof ( buf ) ];
 
        /* Find target settings block */
        settings = settings_target ( settings );
 
        /* Construct name */
-       for ( buf[2] = buf[0] = 0 ; settings ; settings = settings->parent ) {
-               memcpy ( tmp, buf, sizeof ( tmp ) );
-               snprintf ( buf, sizeof ( buf ), ".%s%s", settings->name, tmp );
+       buf[0] = '\0';
+       tmp[0] = '\0';
+       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;
 }
 
 /**