/*
- * "$Id: snprintf.c 4683 2005-09-21 22:17:44Z mike $"
+ * "$Id: snprintf.c 10996 2013-05-29 11:51:34Z msweet $"
*
- * snprintf functions for the Common UNIX Printing System (CUPS).
+ * snprintf functions for CUPS.
*
- * Copyright 1997-2005 by Easy Software Products.
+ * Copyright 2007-2013 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
- * property of Easy Software Products and are protected by Federal
- * copyright law. Distribution and use rights are outlined in the file
- * "LICENSE.txt" which should have been included with this file. If this
- * file is missing or damaged please contact Easy Software Products
- * at:
- *
- * Attn: CUPS Licensing Information
- * Easy Software Products
- * 44141 Airport View Drive, Suite 204
- * Hollywood, Maryland 20636 USA
- *
- * Voice: (301) 373-9600
- * EMail: cups-info@cups.org
- * WWW: http://www.cups.org
+ * property of Apple Inc. and are protected by Federal copyright
+ * law. Distribution and use rights are outlined in the file "LICENSE.txt"
+ * which should have been included with this file. If this file is
+ * file is missing or damaged, see the license at "http://www.cups.org/".
*
* This file is subject to the Apple OS-Developed Software exception.
*
* Include necessary headers...
*/
-#include <stdio.h>
-#include <ctype.h>
-#include "string.h"
+#include "string-private.h"
#ifndef HAVE_VSNPRINTF
char tformat[100], /* Temporary format string for sprintf() */
*tptr, /* Pointer into temporary format */
temp[1024]; /* Buffer for formatted numbers */
+ size_t templen; /* Length of "temp" */
char *s; /* Pointer to string */
int slen; /* Length of string */
int bytes; /* Total number of bytes needed */
if (*format == '*')
{
- // Get width from argument...
+ /*
+ * Get width from argument...
+ */
+
format ++;
width = va_arg(ap, int);
if (*format == '*')
{
- // Get precision from argument...
+ /*
+ * Get precision from argument...
+ */
+
format ++;
prec = va_arg(ap, int);
break;
sprintf(temp, tformat, va_arg(ap, double));
+ templen = strlen(temp):
- bytes += strlen(temp);
+ bytes += (int)templen;
if (bufptr)
{
- if ((bufptr + strlen(temp)) > bufend)
+ if ((bufptr + templen) > bufend)
{
- strncpy(bufptr, temp, (size_t)(bufend - bufptr));
+ strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr = bufend;
}
else
{
- strcpy(bufptr, temp);
- bufptr += strlen(temp);
+ memcpy(bufptr, temp, templen + 1);
+ bufptr += templen;
}
}
break;
break;
sprintf(temp, tformat, va_arg(ap, int));
+ templen = strlen(temp):
- bytes += strlen(temp);
+ bytes += (int)templen;
if (bufptr)
{
- if ((bufptr + strlen(temp)) > bufend)
+ if ((bufptr + templen) > bufend)
{
- strncpy(bufptr, temp, (size_t)(bufend - bufptr));
+ strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr = bufend;
}
else
{
- strcpy(bufptr, temp);
- bufptr += strlen(temp);
+ memcpy(bufptr, temp, templen + 1);
+ bufptr += templen;
}
}
break;
break;
sprintf(temp, tformat, va_arg(ap, void *));
+ templen = strlen(temp):
- bytes += strlen(temp);
+ bytes += (int)templen;
if (bufptr)
{
- if ((bufptr + strlen(temp)) > bufend)
+ if ((bufptr + templen) > bufend)
{
- strncpy(bufptr, temp, (size_t)(bufend - bufptr));
+ strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr = bufend;
}
else
{
- strcpy(bufptr, temp);
- bufptr += strlen(temp);
+ memcpy(bufptr, temp, templen + 1);
+ bufptr += templen;
}
}
break;
else
{
if ((bufptr + width) > bufend)
- width = bufend - bufptr;
+ width = (int)(bufend - bufptr);
memcpy(bufptr, va_arg(ap, char *), (size_t)width);
bufptr += width;
if ((s = va_arg(ap, char *)) == NULL)
s = "(null)";
- slen = strlen(s);
+ slen = (int)strlen(s);
if (slen > width && prec != width)
width = slen;
if (bufptr)
{
if ((bufptr + width) > bufend)
- width = bufend - bufptr;
+ width = (int)(bufend - bufptr);
if (slen > width)
slen = width;
if (sign == '-')
{
- strncpy(bufptr, s, (size_t)slen);
+ memcpy(bufptr, s, (size_t)slen);
memset(bufptr + slen, ' ', (size_t)(width - slen));
}
else
{
memset(bufptr, ' ', (size_t)(width - slen));
- strncpy(bufptr + width - slen, s, (size_t)slen);
+ memcpy(bufptr + width - slen, s, (size_t)slen);
}
bufptr += width;
/*
- * End of "$Id: snprintf.c 4683 2005-09-21 22:17:44Z mike $".
+ * End of "$Id: snprintf.c 10996 2013-05-29 11:51:34Z msweet $".
*/