Skip to content
Snippets Groups Projects
Commit 0c31f3c1 authored by deuce's avatar deuce
Browse files

Dynamically allocate the BBS list.

May fix OS X stack clobbering issue.
parent 8c6bef61
No related branches found
No related tags found
No related merge requests found
...@@ -1518,7 +1518,9 @@ void load_bbslist(struct bbslist **list, size_t listsize, struct bbslist *defaul ...@@ -1518,7 +1518,9 @@ void load_bbslist(struct bbslist **list, size_t listsize, struct bbslist *defaul
*/ */
struct bbslist *show_bbslist(char *current, int connected) struct bbslist *show_bbslist(char *current, int connected)
{ {
struct bbslist *list[MAX_OPTS+1]; #define BBSLIST_ENTRIES (MAX_OPTS+1)
#define BBSLIST_SIZE ((MAX_OPTS+1)*sizeof(struct bbslist))
struct bbslist **list;
int i,j; int i,j;
static int opt=0,bar=0; static int opt=0,bar=0;
int oldopt=-1; int oldopt=-1;
...@@ -1559,18 +1561,23 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1559,18 +1561,23 @@ struct bbslist *show_bbslist(char *current, int connected)
return(NULL); return(NULL);
get_syncterm_filename(shared_list, sizeof(shared_list), SYNCTERM_PATH_LIST, TRUE); get_syncterm_filename(shared_list, sizeof(shared_list), SYNCTERM_PATH_LIST, TRUE);
load_bbslist(list, sizeof(list), &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, current?strdup(current):NULL); list = malloc(BBSLIST_SIZE);
load_bbslist(list, BBSLIST_SIZE, &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, current?strdup(current):NULL);
uifc.helpbuf="Help Button Hack"; uifc.helpbuf="Help Button Hack";
uifc.list(WIN_T2B|WIN_RHT|WIN_EXTKEYS|WIN_DYN|WIN_ACT|WIN_INACT uifc.list(WIN_T2B|WIN_RHT|WIN_EXTKEYS|WIN_DYN|WIN_ACT|WIN_INACT
,0,0,0,&sopt,&sbar,"SyncTERM Settings",connected?connected_settings_menu:settings_menu); ,0,0,0,&sopt,&sbar,"SyncTERM Settings",connected?connected_settings_menu:settings_menu);
for(;;) { for(;;) {
if (quitting) if (quitting) {
free(list);
return NULL; return NULL;
}
if (!at_settings) { if (!at_settings) {
for(;!at_settings;) { for(;!at_settings;) {
if (quitting) if (quitting) {
free(list);
return NULL; return NULL;
}
if(connected) if(connected)
uifc.helpbuf= "`SyncTERM Directory`\n\n" uifc.helpbuf= "`SyncTERM Directory`\n\n"
"Commands:\n\n" "Commands:\n\n"
...@@ -1664,6 +1671,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1664,6 +1671,7 @@ struct bbslist *show_bbslist(char *current, int connected)
if(uifc.changes) { if(uifc.changes) {
parse_url(addy,&retlist,defaults.conn_type,FALSE); parse_url(addy,&retlist,defaults.conn_type,FALSE);
free_list(&list[0],listcount); free_list(&list[0],listcount);
free(list);
return(&retlist); return(&retlist);
} }
} }
...@@ -1673,6 +1681,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1673,6 +1681,7 @@ struct bbslist *show_bbslist(char *current, int connected)
if (!check_exit(TRUE)) if (!check_exit(TRUE))
continue; continue;
free_list(&list[0],listcount); free_list(&list[0],listcount);
free(list);
return(NULL); return(NULL);
} }
} }
...@@ -1762,7 +1771,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1762,7 +1771,7 @@ struct bbslist *show_bbslist(char *current, int connected)
} }
else { else {
add_bbs(settings.list_path,list[listcount-1]); add_bbs(settings.list_path,list[listcount-1]);
load_bbslist(list, sizeof(list), &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, strdup(list[listcount-1]->name)); load_bbslist(list, BBSLIST_SIZE, &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, strdup(list[listcount-1]->name));
oldopt=-1; oldopt=-1;
} }
break; break;
...@@ -1804,7 +1813,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1804,7 +1813,7 @@ struct bbslist *show_bbslist(char *current, int connected)
if(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,str,YesNo)!=0) if(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,str,YesNo)!=0)
break; break;
del_bbs(settings.list_path,list[opt]); del_bbs(settings.list_path,list[opt]);
load_bbslist(list, sizeof(list), &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, NULL, NULL, NULL); load_bbslist(list, BBSLIST_SIZE, &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, NULL, NULL, NULL);
oldopt=-1; oldopt=-1;
break; break;
case MSK_EDIT: case MSK_EDIT:
...@@ -1817,7 +1826,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1817,7 +1826,7 @@ struct bbslist *show_bbslist(char *current, int connected)
break; break;
} }
if(edit_list(list, list[opt],settings.list_path,FALSE)) { if(edit_list(list, list[opt],settings.list_path,FALSE)) {
load_bbslist(list, sizeof(list), &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, strdup(list[opt]->name)); load_bbslist(list, BBSLIST_SIZE, &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, strdup(list[opt]->name));
oldopt=-1; oldopt=-1;
} }
break; break;
...@@ -1833,13 +1842,14 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1833,13 +1842,14 @@ struct bbslist *show_bbslist(char *current, int connected)
check_exit(FALSE); check_exit(FALSE);
} }
else if(edit_list(list, list[opt],settings.list_path,FALSE)) { else if(edit_list(list, list[opt],settings.list_path,FALSE)) {
load_bbslist(list, sizeof(list), &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, strdup(list[opt]->name)); load_bbslist(list, BBSLIST_SIZE, &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, strdup(list[opt]->name));
oldopt=-1; oldopt=-1;
} }
} }
else { else {
memcpy(&retlist,list[val],sizeof(struct bbslist)); memcpy(&retlist,list[val],sizeof(struct bbslist));
free_list(&list[0],listcount); free_list(&list[0],listcount);
free(list);
return(&retlist); return(&retlist);
} }
} }
...@@ -1894,6 +1904,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1894,6 +1904,7 @@ struct bbslist *show_bbslist(char *current, int connected)
if (!check_exit(TRUE)) if (!check_exit(TRUE))
continue; continue;
free_list(&list[0],listcount); free_list(&list[0],listcount);
free(list);
return(NULL); return(NULL);
case 0: /* Edit default connection settings */ case 0: /* Edit default connection settings */
edit_list(NULL, &defaults,settings.list_path,TRUE); edit_list(NULL, &defaults,settings.list_path,TRUE);
...@@ -1930,6 +1941,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1930,6 +1941,7 @@ struct bbslist *show_bbslist(char *current, int connected)
} }
else if (check_exit(FALSE)) { else if (check_exit(FALSE)) {
free_list(&list[0],listcount); free_list(&list[0],listcount);
free(list);
return(NULL); return(NULL);
} }
} }
...@@ -1942,7 +1954,7 @@ struct bbslist *show_bbslist(char *current, int connected) ...@@ -1942,7 +1954,7 @@ struct bbslist *show_bbslist(char *current, int connected)
break; break;
case 3: /* Program settings */ case 3: /* Program settings */
change_settings(); change_settings();
load_bbslist(list, sizeof(list), &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, list[opt]?strdup(list[opt]->name):NULL); load_bbslist(list, BBSLIST_SIZE, &defaults, settings.list_path, sizeof(settings.list_path), shared_list, sizeof(shared_list), &listcount, &opt, &bar, list[opt]?strdup(list[opt]->name):NULL);
oldopt=-1; oldopt=-1;
break; break;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment