Added allocation of program names from program-handler's address space
diff --git a/contiki/apps/program-handler.c b/contiki/apps/program-handler.c
index 8c7e858..d16b1a0 100644
--- a/contiki/apps/program-handler.c
+++ b/contiki/apps/program-handler.c
@@ -32,7 +32,7 @@
*
* This file is part of the Contiki desktop OS
*
- * $Id: program-handler.c,v 1.12 2003/08/05 13:48:43 adamdunkels Exp $
+ * $Id: program-handler.c,v 1.13 2003/08/05 22:02:52 adamdunkels Exp $
*
*/
@@ -153,13 +153,48 @@
}
/*-----------------------------------------------------------------------------------*/
+#ifdef WITH_LOADER_ARCH
+#define NUM_LOADERNAMES 8
+#define NAMELEN 16
+static char loadernames[(NAMELEN + 1) * NUM_LOADERNAMES];
+static char *
+loadername_copy(char *name)
+{
+ char i;
+ char *loadernamesptr;
+
+ loadernamesptr = loadernames;
+ /* Allocate a place in the loadernames table. */
+ for(i = 0; i < NUM_LOADERNAMES; ++i) {
+ if(*loadernamesptr == 0) {
+ strncpy(loadernamesptr, name, NAMELEN);
+ return loadernamesptr;
+ }
+ loadernamesptr += NAMELEN + 1;
+ }
+ return NULL;
+}
+
+static void
+loadername_free(char *name)
+{
+ *name = 0;
+}
+#endif /* WITH_LOADER_ARCH */
+/*-----------------------------------------------------------------------------------*/
void
program_handler_load(char *name)
{
#ifdef WITH_LOADER_ARCH
- dispatcher_emit(loader_signal_load, name, id);
- ctk_label_set_text(&loadingname, name);
- ctk_dialog_open(&loadingdialog);
+ name = loadername_copy(name);
+ if(name != NULL) {
+ dispatcher_emit(loader_signal_load, name, id);
+ ctk_label_set_text(&loadingname, name);
+ ctk_dialog_open(&loadingdialog);
+ } else {
+ ctk_label_set_text(&errortype, "Out of memory");
+ ctk_dialog_open(&errordialog);
+ }
/* ctk_redraw(); */
/* ctk_window_redraw(&loadingdialog);*/
#endif /* WITH_LOADER_ARCH */
@@ -217,6 +252,7 @@
#if WITH_LOADER_ARCH
ctk_dialog_close();
err = LOADER_LOAD(data);
+ loadername_free(data);
if(err != LOADER_OK) {
ctk_label_set_text(&errortype, errormsgs[err]);
ctk_dialog_open(&errordialog);