From 0821e855642037c040fc9b58669deead9a5c7104 Mon Sep 17 00:00:00 2001 From: Taco Hoekwater Date: Sat, 5 Jul 2008 07:35:04 +0000 Subject: [PATCH] remove sprintf call git-svn-id: svn+ssh://scm.foundry.supelec.fr/svn/metapost/mplib/trunk@601 b0617d17-b707-0410-b22c-fd2634e05cc4 --- src/texk/web2c/mpdir/mpost.w | 84 ++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/src/texk/web2c/mpdir/mpost.w b/src/texk/web2c/mpdir/mpost.w index 4a7b205..1d853ba 100644 --- a/src/texk/web2c/mpdir/mpost.w +++ b/src/texk/web2c/mpdir/mpost.w @@ -69,6 +69,22 @@ static char *mpost_xstrdup(const char *s) { } return w; } +static char *mpost_itoa (int i) { + char res[32] ; + unsigned idx = 30; + unsigned v = (unsigned)abs(i); + memset(res,0,32*sizeof(char)); + while (v>=10) { + char d = (char)(v % 10); + v = v / 10; + res[idx--] = d; + } + res[idx--] = (char)v; + if (i<0) { + res[idx--] = '-'; + } + return mpost_xstrdup(res+idx); +} @ @c @@ -89,39 +105,41 @@ static void mpost_run_editor (MP mp, char *fname, int fline) { while ((c = *edit_value++) != (char)0) { if (c == '%') { switch (c = *edit_value++) { - case 'd': - if (ddone) { - fprintf (stderr,"call_edit: `%%d' appears twice in editor command\n"); - exit(EXIT_FAILURE); - } - sprintf (temp, "%d", fline); - while (*temp != '\0') - temp++; - ddone = 1; - break; - case 's': - if (sdone) { - fprintf (stderr,"call_edit: `%%s' appears twice in editor command\n"); - exit(EXIT_FAILURE); - } - while (*fname != '\0') - *temp++ = *fname++; - *temp++ = '.'; - *temp++ = 'm'; - *temp++ = 'p'; - sdone = 1; - break; - case '\0': - *temp++ = '%'; - /* Back up to the null to force termination. */ - edit_value--; - break; - default: - *temp++ = '%'; - *temp++ = c; - break; - } - } else { + case 'd': + if (ddone) { + fprintf (stderr,"call_edit: `%%d' appears twice in editor command\n"); + exit(EXIT_FAILURE); + } else { + char *s = mpost_itoa(fline); + while (*s != '\0') + *temp++ = *s++; + ddone = 1; + } + break; + case 's': + if (sdone) { + fprintf (stderr,"call_edit: `%%s' appears twice in editor command\n"); + exit(EXIT_FAILURE); + } else { + while (*fname != '\0') + *temp++ = *fname++; + *temp++ = '.'; + *temp++ = 'm'; + *temp++ = 'p'; + sdone = 1; + } + break; + case '\0': + *temp++ = '%'; + /* Back up to the null to force termination. */ + edit_value--; + break; + default: + *temp++ = '%'; + *temp++ = c; + break; + } + } else { *temp++ = c; } } -- 2.32.0.93.g670b81a890