openbsd-ports/devel/gputils/patches/patch-gpasm_lst_c

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);