db: fix unicode support (thanks giacomo)
from the unicode-db patch readme: command() receives a char* that is assigned to lp, which is a Rune*, and lp is incremented later in readchar(), so each read consumed 4 bytes. The only time command() is called is in runpcs() with bkpt->comm, which is a char* built in subpcs through a char*, so the string stored in bkpt->comm was not a Rune string. A way to test the bug is: db program main:b argv/X :r
This commit is contained in:
parent
4d0343c9d2
commit
c86561f625
|
@ -23,8 +23,8 @@ WORD adrval, cntval, loopcnt;
|
|||
int adrflg, cntflg;
|
||||
|
||||
/* command decoding */
|
||||
|
||||
command(char *buf, int defcom)
|
||||
int
|
||||
command(Rune *buf, int defcom)
|
||||
{
|
||||
char *reg;
|
||||
char savc;
|
||||
|
@ -39,7 +39,7 @@ command(char *buf, int defcom)
|
|||
if (*buf==EOR)
|
||||
return(FALSE);
|
||||
clrinp();
|
||||
lp=(Rune*)buf;
|
||||
lp=buf;
|
||||
}
|
||||
do {
|
||||
adrflg=expr(0); /* first address */
|
||||
|
|
|
@ -64,7 +64,7 @@ struct bkpt {
|
|||
int count;
|
||||
int initcnt;
|
||||
int flag;
|
||||
char comm[MAXCOM];
|
||||
Rune comm[MAXCOM];
|
||||
BKPT *nxtbkpt;
|
||||
};
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ void clrinp(void);
|
|||
void cmdmap(Map*);
|
||||
void cmdsrc(int, Map*);
|
||||
void cmdwrite(int, Map*);
|
||||
int command(char*, int);
|
||||
int command(Rune*, int);
|
||||
int convdig(int);
|
||||
void ctrace(int);
|
||||
WORD defval(WORD);
|
||||
|
|
|
@ -20,7 +20,7 @@ subpcs(int modif)
|
|||
int n, r;
|
||||
long line, curr;
|
||||
BKPT *bk;
|
||||
char *comptr;
|
||||
Rune *comptr;
|
||||
|
||||
runmode=SINGLE;
|
||||
r = 0;
|
||||
|
|
|
@ -166,7 +166,7 @@ printtrace(int modif)
|
|||
dprint(buf);
|
||||
if (bk->count != 1)
|
||||
dprint(",%d", bk->count);
|
||||
dprint(":%c %s", bk->flag == BKPTTMP ? 'B' : 'b', bk->comm);
|
||||
dprint(":%c %S", bk->flag == BKPTTMP ? 'B' : 'b', bk->comm);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue