mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Work around non-compliant sprintf().
Rockbox's sprintf() lacks the ability to left-justify a string. Fixed by adding a copy_left_justfied() function to misc.c. This is a new version of this commit, as the previous version broke saving!
This commit is contained in:

committed by
Simon Tatham

parent
2d33375027
commit
cefb84c2db
4
midend.c
4
midend.c
@ -1610,7 +1610,9 @@ void midend_serialise(midend *me,
|
|||||||
#define wr(h,s) do { \
|
#define wr(h,s) do { \
|
||||||
char hbuf[80]; \
|
char hbuf[80]; \
|
||||||
char *str = (s); \
|
char *str = (s); \
|
||||||
sprintf(hbuf, "%-8.8s:%d:", (h), (int)strlen(str)); \
|
char lbuf[9]; \
|
||||||
|
copy_left_justified(lbuf, sizeof(lbuf), h); \
|
||||||
|
sprintf(hbuf, "%s:%d:", lbuf, (int)strlen(str)); \
|
||||||
write(wctx, hbuf, strlen(hbuf)); \
|
write(wctx, hbuf, strlen(hbuf)); \
|
||||||
write(wctx, str, strlen(str)); \
|
write(wctx, str, strlen(str)); \
|
||||||
write(wctx, "\n", 1); \
|
write(wctx, "\n", 1); \
|
||||||
|
13
misc.c
13
misc.c
@ -358,6 +358,19 @@ void draw_text_outline(drawing *dr, int x, int y, int fonttype,
|
|||||||
draw_text(dr, x, y+1, fonttype, fontsize, align, outline_colour, text);
|
draw_text(dr, x, y+1, fonttype, fontsize, align, outline_colour, text);
|
||||||
}
|
}
|
||||||
draw_text(dr, x, y, fonttype, fontsize, align, text_colour, text);
|
draw_text(dr, x, y, fonttype, fontsize, align, text_colour, text);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* kludge for non-compliant sprintf() */
|
||||||
|
void copy_left_justified(char *buf, size_t sz, const char *str)
|
||||||
|
{
|
||||||
|
memset(buf, ' ', sz - 1);
|
||||||
|
int len = strlen(str);
|
||||||
|
if(len <= sz - 1)
|
||||||
|
memcpy(buf, str, len);
|
||||||
|
else
|
||||||
|
fatal("overrun");
|
||||||
|
buf[sz - 1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vim: set shiftwidth=4 tabstop=8: */
|
/* vim: set shiftwidth=4 tabstop=8: */
|
||||||
|
@ -376,6 +376,11 @@ void pos2c(int w, int h, int pos, int *cx, int *cy);
|
|||||||
void draw_text_outline(drawing *dr, int x, int y, int fonttype,
|
void draw_text_outline(drawing *dr, int x, int y, int fonttype,
|
||||||
int fontsize, int align,
|
int fontsize, int align,
|
||||||
int text_colour, int outline_colour, char *text);
|
int text_colour, int outline_colour, char *text);
|
||||||
|
|
||||||
|
/* Copies text left-justified with spaces. Length of string must be
|
||||||
|
* less than buffer size. */
|
||||||
|
void copy_left_justified(char *buf, size_t sz, const char *str);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dsf.c
|
* dsf.c
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user