X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/dfcf069d565c347abf3cb7cec80e6ed8432037ba..2a0bd758b7c45138c8343f8a591ab8c77401b52b:/src/doprnt.c diff --git a/src/doprnt.c b/src/doprnt.c index 7eaa271705..1cfc5aecee 100644 --- a/src/doprnt.c +++ b/src/doprnt.c @@ -17,8 +17,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #include @@ -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,15 +48,13 @@ Boston, MA 02111-1307, USA. */ another macro. */ #include "charset.h" -extern long *xmalloc (), *xrealloc (); - static int doprnt1 (); /* Generate output from a format-spec FORMAT, terminated at position FORMAT_END. Output goes in BUFFER, which has room for BUFSIZE chars. If the output does not fit, truncate it to fit. - Returns the number of characters stored into BUFFER. + Returns the number of bytes stored into BUFFER. ARGS points to the vector of arguments, and NARGS says how many. A double counts as two arguments. String arguments are passed as C strings. @@ -108,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) @@ -135,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) { @@ -207,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': @@ -216,12 +221,12 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) { union { double d; char *half[2]; } u; if (cnt + 1 == nargs) - error ("not enough arguments for format string"); + error ("Not enough arguments for format string"); u.half[0] = args[cnt++]; 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; } @@ -229,18 +234,18 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) string[-1] = 's'; case 's': if (cnt == nargs) - error ("not enough arguments for format string"); + error ("Not enough arguments for format string"); if (fmtcpy[1] != 's') 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); @@ -292,8 +297,9 @@ 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); + error ("Not enough arguments for format string"); + tem = CHAR_STRING ((int) (EMACS_INT) args[cnt], charbuf); + string = charbuf; cnt++; string[tem] = 0; width = strwidth (string, tem); @@ -328,3 +334,6 @@ doprnt1 (lispstrings, buffer, bufsize, format, format_end, nargs, args) *bufptr = 0; /* Make sure our string end with a '\0' */ return bufptr - buffer; } + +/* arch-tag: aa0ab528-7c5f-4c73-894c-aa2526a1efb3 + (do not change this comment) */