X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/e9aea0ef2477c19bc1d34fea34b16919c33463c5..34368a22c54c089f5ebabb7f0625862d6b8008f8:/src/doprnt.c diff --git a/src/doprnt.c b/src/doprnt.c index b88acf4211..3fd6222c9d 100644 --- a/src/doprnt.c +++ b/src/doprnt.c @@ -29,6 +29,14 @@ Boston, MA 02111-1307, USA. */ #include #endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + #include "lisp.h" #ifndef DBL_MAX_10_EXP @@ -40,8 +48,6 @@ Boston, MA 02111-1307, USA. */ another macro. */ #include "charset.h" -extern long *xmalloc (), *xrealloc (); - static int doprnt1 (); /* Generate output from a format-spec FORMAT, @@ -54,6 +60,7 @@ static int doprnt1 (); String arguments are passed as C strings. Integers are passed as C integers. */ +int doprnt (buffer, bufsize, format, format_end, nargs, args) char *buffer; register int bufsize; @@ -68,6 +75,7 @@ doprnt (buffer, bufsize, format, format_end, nargs, args) /* Like doprnt except that strings in ARGS are passed as Lisp_Object. */ +int doprnt_lisp (buffer, bufsize, format, format_end, nargs, args) char *buffer; register int bufsize; @@ -106,11 +114,10 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) char *big_buffer = 0; register int tem; - char *string; + unsigned char *string; char fixed_buffer[20]; /* Default buffer for small formatting. */ char *fmtcpy; int minlen; - int size; /* Field width factor; e.g., %90d */ unsigned char charbuf[5]; /* Used for %c. */ if (format_end == 0) @@ -133,7 +140,7 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) fmt++; /* Copy this one %-spec into fmtcpy. */ - string = fmtcpy; + string = (unsigned char *)fmtcpy; *string++ = '%'; while (1) { @@ -205,7 +212,7 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) abort (); sprintf (sprintf_buffer, fmtcpy, args[cnt++]); /* Now copy into final output, truncating as nec. */ - string = sprintf_buffer; + string = (unsigned char *)sprintf_buffer; goto doit; case 'f': @@ -219,7 +226,7 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) u.half[1] = args[cnt++]; sprintf (sprintf_buffer, fmtcpy, u.d); /* Now copy into final output, truncating as nec. */ - string = sprintf_buffer; + string = (unsigned char *)sprintf_buffer; goto doit; } @@ -232,13 +239,13 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) minlen = atoi (&fmtcpy[1]); if (lispstrings) { - string = (char *) ((struct Lisp_String *)args[cnt])->data; - tem = ((struct Lisp_String *)args[cnt])->size; + string = ((struct Lisp_String *)args[cnt])->data; + tem = STRING_BYTES ((struct Lisp_String *)args[cnt]); cnt++; } else { - string = args[cnt++]; + string = (unsigned char *)args[cnt++]; tem = strlen (string); } width = strwidth (string, tem); @@ -267,7 +274,7 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) { /* Truncate the string at character boundary. */ tem = bufsize; - while (!CHAR_HEAD_P (string + tem - 1)) tem--; + while (!CHAR_HEAD_P (string[tem - 1])) tem--; bcopy (string, bufptr, tem); /* We must calculate WIDTH again. */ width = strwidth (bufptr, tem); @@ -291,7 +298,8 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) case 'c': if (cnt == nargs) error ("not enough arguments for format string"); - tem = CHAR_STRING ((EMACS_INT) args[cnt], charbuf, string); + tem = CHAR_STRING ((int) (EMACS_INT) args[cnt], charbuf); + string = charbuf; cnt++; string[tem] = 0; width = strwidth (string, tem); @@ -310,8 +318,8 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) char *save_bufptr = bufptr; do { *bufptr++ = *fmt++; } - while (--bufsize > 0 && !CHAR_HEAD_P (fmt)); - if (!CHAR_HEAD_P (fmt)) + while (--bufsize > 0 && !CHAR_HEAD_P (*fmt)); + if (!CHAR_HEAD_P (*fmt)) { bufptr = save_bufptr; break;