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:
Franklin Wei
2017-04-28 19:48:36 -04:00
committed by Simon Tatham
parent 2d33375027
commit cefb84c2db
3 changed files with 21 additions and 1 deletions

View File

@ -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
View File

@ -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: */

View File

@ -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
*/ */