diff options
| author | Franklin Wei <me@fwei.tk> | 2017-04-28 19:48:36 -0400 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2017-04-30 18:32:36 +0100 |
| commit | cefb84c2dbec914dc2733f776bb39d9055034c92 (patch) | |
| tree | 7cf851cc64c9a9d9608c2a8fccd5dec899a41b44 | |
| parent | 2d333750272c3967cfd5cd3677572cddeaad5932 (diff) | |
| download | puzzles-cefb84c2dbec914dc2733f776bb39d9055034c92.zip puzzles-cefb84c2dbec914dc2733f776bb39d9055034c92.tar.gz puzzles-cefb84c2dbec914dc2733f776bb39d9055034c92.tar.bz2 puzzles-cefb84c2dbec914dc2733f776bb39d9055034c92.tar.xz | |
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!
| -rw-r--r-- | midend.c | 4 | ||||
| -rw-r--r-- | misc.c | 13 | ||||
| -rw-r--r-- | puzzles.h | 5 |
3 files changed, 21 insertions, 1 deletions
@@ -1610,7 +1610,9 @@ void midend_serialise(midend *me, #define wr(h,s) do { \ char hbuf[80]; \ 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, str, strlen(str)); \ write(wctx, "\n", 1); \ @@ -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, 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: */ @@ -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, int fontsize, int align, 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 */ |