Fixed a bug which was causing sprintf() to crash.
Added a test for it. Issue #66 git-svn-id: http://picoc.googlecode.com/svn/trunk@401 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
84d2c663e8
commit
5e6ddfa7ff
10
clibrary.c
10
clibrary.c
|
@ -288,15 +288,11 @@ void LibPrintf(struct ParseState *Parser, struct Value *ReturnValue, struct Valu
|
||||||
void LibSPrintf(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
void LibSPrintf(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
||||||
{
|
{
|
||||||
struct OutputStream StrStream;
|
struct OutputStream StrStream;
|
||||||
struct Value *DerefVal;
|
|
||||||
int DerefOffset;
|
|
||||||
StrStream.i.Str.WritePos = VariableDereferencePointer(StrStream.i.Str.Parser, Param[0], &DerefVal, &DerefOffset, NULL, NULL);
|
|
||||||
|
|
||||||
if (DerefVal->Typ->Base != TypeArray)
|
|
||||||
ProgramFail(Parser, "can only print to arrays of char");
|
|
||||||
|
|
||||||
StrStream.Putch = &SPutc;
|
StrStream.Putch = &SPutc;
|
||||||
StrStream.i.Str.Parser = Parser;
|
StrStream.i.Str.Parser = Parser;
|
||||||
|
StrStream.i.Str.WritePos = Param[0]->Val->NativePointer;
|
||||||
|
|
||||||
GenericPrintf(Parser, ReturnValue, Param+1, NumArgs-1, &StrStream);
|
GenericPrintf(Parser, ReturnValue, Param+1, NumArgs-1, &StrStream);
|
||||||
PrintCh(0, &StrStream);
|
PrintCh(0, &StrStream);
|
||||||
ReturnValue->Val->NativePointer = *Param;
|
ReturnValue->Val->NativePointer = *Param;
|
||||||
|
|
8
tests/37_sprintf.c
Normal file
8
tests/37_sprintf.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
char Buf[100];
|
||||||
|
int Count;
|
||||||
|
|
||||||
|
for (Count = 1; Count <= 20; Count++)
|
||||||
|
{
|
||||||
|
sprintf(Buf, "->%02d<-\n", Count);
|
||||||
|
printf("%s", Buf);
|
||||||
|
}
|
20
tests/37_sprintf.expect
Normal file
20
tests/37_sprintf.expect
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
->01<-
|
||||||
|
->02<-
|
||||||
|
->03<-
|
||||||
|
->04<-
|
||||||
|
->05<-
|
||||||
|
->06<-
|
||||||
|
->07<-
|
||||||
|
->08<-
|
||||||
|
->09<-
|
||||||
|
->10<-
|
||||||
|
->11<-
|
||||||
|
->12<-
|
||||||
|
->13<-
|
||||||
|
->14<-
|
||||||
|
->15<-
|
||||||
|
->16<-
|
||||||
|
->17<-
|
||||||
|
->18<-
|
||||||
|
->19<-
|
||||||
|
->20<-
|
|
@ -29,7 +29,8 @@ TESTS= 00_assignment.test \
|
||||||
29_array_address.test \
|
29_array_address.test \
|
||||||
34_array_assignment.test \
|
34_array_assignment.test \
|
||||||
35_sizeof.test \
|
35_sizeof.test \
|
||||||
36_array_initialisers.test
|
36_array_initialisers.test \
|
||||||
|
37_sprintf.test
|
||||||
|
|
||||||
%.test: %.expect %.c
|
%.test: %.expect %.c
|
||||||
@echo Test: $*...
|
@echo Test: $*...
|
||||||
|
|
Loading…
Reference in a new issue