266 lines
8.4 KiB
Plaintext
266 lines
8.4 KiB
Plaintext
$OpenBSD: patch-gpasm_lst_c,v 1.2 2004/01/30 01:01:11 naddy Exp $
|
|
--- gpasm/lst.c.orig 2004-01-17 13:33:51.000000000 +1100
|
|
+++ gpasm/lst.c 2004-01-25 20:42:51.000000000 +1100
|
|
@@ -76,7 +76,7 @@ void lst_init()
|
|
state.lst.symboltable = 1;
|
|
|
|
/* Determine state.startdate */
|
|
- gp_date_string(state.lst.startdate);
|
|
+ gp_date_string(state.lst.startdate, sizeof(state.lst.startdate));
|
|
|
|
if (state.cmd_line.macro_expand == 0){
|
|
state.lst.expand = 1;
|
|
@@ -93,8 +93,8 @@ void lst_init()
|
|
state.lst.tabstop = 8; /* Default tabstop every 8 */
|
|
|
|
if (state.lstfile != named) {
|
|
- strcpy(state.lstfilename, state.basefilename);
|
|
- strcat(state.lstfilename, ".lst");
|
|
+ strlcpy(state.lstfilename, state.basefilename, sizeof(state.lstfilename));
|
|
+ strlcat(state.lstfilename, ".lst", sizeof(state.lstfilename));
|
|
}
|
|
|
|
if (state.lstfile == suppress) {
|
|
@@ -118,7 +118,6 @@ void lst_init()
|
|
void lst_memory_map(MemBlock *m)
|
|
{
|
|
char buf[BUFSIZ];
|
|
- char *e;
|
|
int i, j, base, row_used, num_per_line, num_per_block;
|
|
|
|
lst_line("");
|
|
@@ -151,29 +150,26 @@ void lst_memory_map(MemBlock *m)
|
|
}
|
|
|
|
if(row_used) {
|
|
- e = buf;
|
|
- sprintf(e, "%08x :", (i + base) << _16bit_core);
|
|
- e += strlen(e);
|
|
+ snprintf(buf, sizeof(buf), "%08x :", (i + base) << _16bit_core);
|
|
for (j = 0; j < num_per_line; j++) {
|
|
if ((j % num_per_block) == 0) {
|
|
- *e++ = ' ';
|
|
+ strlcat(buf, " ", sizeof(buf));
|
|
}
|
|
if (m->memory[i + j] & MEM_USED_MASK) {
|
|
- *e++ = 'X';
|
|
+ strlcat(buf, "X", sizeof(buf));
|
|
if (_16bit_core) {
|
|
/* each word has two bytes */
|
|
- *e++ = 'X';
|
|
+ strlcat(buf, "X", sizeof(buf));
|
|
}
|
|
} else {
|
|
- *e++ = '-';
|
|
+ strlcat(buf, "-", sizeof(buf));
|
|
if (_16bit_core) {
|
|
/* each word has two bytes */
|
|
- *e++ = '-';
|
|
+ strlcat(buf, "-", sizeof(buf));
|
|
}
|
|
}
|
|
}
|
|
|
|
- *e = '\0'; /* terminate the new string */
|
|
lst_line(buf);
|
|
}
|
|
}
|
|
@@ -185,7 +181,7 @@ void lst_memory_map(MemBlock *m)
|
|
lst_line("All other memory blocks unused.");
|
|
lst_line("");
|
|
|
|
- sprintf(buf, "Program Memory Words Used: %i", i_memory_used(state.i_memory));
|
|
+ snprintf(buf, sizeof(buf), "Program Memory Words Used: %i", i_memory_used(state.i_memory));
|
|
lst_line(buf);
|
|
|
|
}
|
|
@@ -215,51 +211,44 @@ void lst_close()
|
|
void lst_format_line(char *src_line, int value)
|
|
{
|
|
char m[BUFSIZ];
|
|
- char *e;
|
|
+ char buf[BUFSIZ];
|
|
unsigned int emitted = 0;
|
|
|
|
assert(src_line != NULL);
|
|
|
|
- e = m;
|
|
switch (state.lst.line.linetype) {
|
|
case equ:
|
|
case set:
|
|
- sprintf(e, " %08X", value);
|
|
- e += strlen(e);
|
|
- strcpy(e, " ");
|
|
- e += 5;
|
|
+ snprintf(m, sizeof(m), " %08X", value);
|
|
+ strlcat(m, " ", sizeof(m));
|
|
break;
|
|
case org:
|
|
- sprintf(e, "%04X ", state.org << _16bit_core);
|
|
- e += strlen(e);
|
|
- strcpy(e, " ");
|
|
- e += 5;
|
|
+ snprintf(m, sizeof(m), "%04X ", state.org << _16bit_core);
|
|
+ strlcat(m, " ", sizeof(m));
|
|
break;
|
|
case idlocs:
|
|
/* not used for 16 bit devices, config is used */
|
|
- sprintf(e, "%04X %04X %04X ",
|
|
+ snprintf(m, sizeof(m), "%04X %04X %04X ",
|
|
state.device.id_location,
|
|
i_memory_get(state.i_memory, state.device.id_location) & 0xffff,
|
|
i_memory_get(state.i_memory,
|
|
state.device.id_location + 1) & 0xffff);
|
|
- e += strlen(e);
|
|
break;
|
|
case insn:
|
|
- sprintf(e, "%04X ", state.lst.line.was_org << _16bit_core);
|
|
- e += strlen(e);
|
|
+ snprintf(m, sizeof(m), "%04X ", state.lst.line.was_org << _16bit_core);
|
|
emitted = state.org - state.lst.line.was_org;
|
|
- if (emitted >= 1)
|
|
- sprintf(e, "%04X ", i_memory_get(state.i_memory,
|
|
+ if (emitted >= 1) {
|
|
+ snprintf(buf, sizeof(buf), "%04X ", i_memory_get(state.i_memory,
|
|
state.lst.line.was_org) & 0xffff);
|
|
- else
|
|
- sprintf(e, " ");
|
|
- e += strlen(e);
|
|
- if (emitted >= 2)
|
|
- sprintf(e, "%04X ", i_memory_get(state.i_memory,
|
|
+ strlcat(m, buf, sizeof(m));
|
|
+ } else
|
|
+ strlcat(m, " ", sizeof(m));
|
|
+ if (emitted >= 2) {
|
|
+ snprintf(buf, sizeof(buf), "%04X ", i_memory_get(state.i_memory,
|
|
state.lst.line.was_org + 1) & 0xffff);
|
|
- else
|
|
- sprintf(e, " ");
|
|
- e += strlen(e);
|
|
+ strlcat(m, buf, sizeof(buf));
|
|
+ } else
|
|
+ strlcat(m, " ", sizeof(m));
|
|
break;
|
|
case config:
|
|
if(_16bit_core) {
|
|
@@ -267,33 +256,28 @@ void lst_format_line(char *src_line, int
|
|
words in the list file. */
|
|
if (state.lst.config_address == CONFIG4L) {
|
|
/* Special case */
|
|
- sprintf(e, "%06X %04X ",
|
|
+ snprintf(m, sizeof(m), "%06X %04X ",
|
|
state.lst.config_address,
|
|
i_memory_get(state.i_memory,
|
|
state.lst.config_address >> 1) & 0xffff);
|
|
- e += strlen(e);
|
|
} else if((state.lst.config_address & 0x1) == 0) {
|
|
/* if it is an even address don't print anything */
|
|
- strcpy(e, " ");
|
|
- e += 15;
|
|
+ strlcpy(m, " ", sizeof(m));
|
|
} else {
|
|
- sprintf(e, "%06X %04X ",
|
|
+ snprintf(m, sizeof(m), "%06X %04X ",
|
|
state.lst.config_address - 1,
|
|
i_memory_get(state.i_memory,
|
|
(state.lst.config_address - 1) >> 1) & 0xffff);
|
|
- e += strlen(e);
|
|
}
|
|
} else {
|
|
- sprintf(e, "%06X %04X ",
|
|
+ snprintf(m, sizeof(m), "%06X %04X ",
|
|
state.lst.config_address,
|
|
i_memory_get(state.i_memory,
|
|
state.lst.config_address) & 0xffff);
|
|
- e += strlen(e);
|
|
}
|
|
break;
|
|
case res:
|
|
- strcpy(e, " ");
|
|
- e += 15;
|
|
+ strlcpy(m, " ", sizeof(m));
|
|
if (SECTION_FLAGS & STYP_TEXT) {
|
|
/* generate line numbers for res directives in program memory */
|
|
emitted = state.org - state.lst.line.was_org;
|
|
@@ -303,22 +287,22 @@ void lst_format_line(char *src_line, int
|
|
case dir:
|
|
case none:
|
|
default:
|
|
- strcpy(e, " ");
|
|
- e += 15;
|
|
+ strlcpy(m, " ", sizeof(m));
|
|
break;
|
|
}
|
|
|
|
if (state.stGlobal == state.stTop) {
|
|
- sprintf(e, "%05d ", state.src->line_number);
|
|
+ snprintf(buf, sizeof(buf), "%05d ", state.src->line_number);
|
|
} else {
|
|
- sprintf(e, " M ");
|
|
+ snprintf(buf, sizeof(buf), " M ");
|
|
}
|
|
- e += strlen(e);
|
|
+ strlcat(m, buf, sizeof(m));
|
|
|
|
/* Now copy 'l' to 'e', expanding tabs as required */
|
|
{
|
|
int column = 0;
|
|
char *old;
|
|
+ char *e = m + strlen(m);
|
|
|
|
old = src_line;
|
|
|
|
@@ -355,7 +339,7 @@ void lst_format_line(char *src_line, int
|
|
#endif
|
|
|
|
if (state.lst.line.linetype == idlocs) {
|
|
- sprintf(m, " %04X %04X ",
|
|
+ snprintf(m, sizeof(m), " %04X %04X ",
|
|
i_memory_get(state.i_memory,
|
|
state.device.id_location + 2) & 0xffff,
|
|
i_memory_get(state.i_memory,
|
|
@@ -368,14 +352,14 @@ void lst_format_line(char *src_line, int
|
|
|
|
for (i = 2; i < emitted; i += 2) {
|
|
if ((i + 1) < emitted)
|
|
- sprintf(m, "%04X %04X %04X",
|
|
+ snprintf(m, sizeof(m), "%04X %04X %04X",
|
|
((state.lst.line.was_org + i) << _16bit_core),
|
|
i_memory_get(state.i_memory,
|
|
state.lst.line.was_org + i) & 0xffff,
|
|
i_memory_get(state.i_memory,
|
|
state.lst.line.was_org + i + 1) & 0xffff);
|
|
else
|
|
- sprintf(m, "%04X %04X",
|
|
+ snprintf(m, sizeof(m), "%04X %04X",
|
|
((state.lst.line.was_org + i) << _16bit_core),
|
|
i_memory_get(state.i_memory,
|
|
state.lst.line.was_org + i) & 0xffff);
|
|
@@ -396,7 +380,7 @@ void lst_symbol_table(struct symbol_tabl
|
|
char buf[BUFSIZ];
|
|
|
|
lst_line("SYMBOL TABLE");
|
|
- sprintf(buf, "%-32s %-8s", " LABEL", " VALUE");
|
|
+ snprintf(buf, sizeof(buf), "%-32s %-8s", " LABEL", " VALUE");
|
|
lst_line(buf);
|
|
lst_line("");
|
|
|
|
@@ -414,7 +398,7 @@ void lst_symbol_table(struct symbol_tabl
|
|
struct variable *var;
|
|
|
|
var = get_symbol_annotation(lst[i]);
|
|
- sprintf(buf,
|
|
+ snprintf(buf, sizeof(buf),
|
|
symbol_format,
|
|
get_symbol_name(lst[i]),
|
|
var ? var->value : 0);
|
|
@@ -444,7 +428,7 @@ void lst_defines_table(struct symbol_tab
|
|
char *defined_as;
|
|
|
|
defined_as = get_symbol_annotation(lst[i]);
|
|
- sprintf(buf,
|
|
+ snprintf(buf, sizeof(buf),
|
|
symbol_format,
|
|
get_symbol_name(lst[i]),
|
|
defined_as);
|