#include "ipp-private.h"
#include "string-private.h"
-#include "debug-private.h"
+#include "debug-internal.h"
/*
static ipp_t *parse_collection(_ipp_file_t *f, _ipp_vars_t *v, void *user_data);
static int parse_value(_ipp_file_t *f, _ipp_vars_t *v, void *user_data, ipp_t *ipp, ipp_attribute_t **attr, int element);
-static void report_error(_ipp_file_t *f, _ipp_vars_t *v, void *user_data, const char *message, ...) __attribute((__format__ (__printf__, 4, 5)));
+static void report_error(_ipp_file_t *f, _ipp_vars_t *v, void *user_data, const char *message, ...) _CUPS_FORMAT(4, 5);
/*
if (_ippFileReadToken(&f, name, sizeof(name)) && _ippFileReadToken(&f, temp, sizeof(temp)))
{
- _ippVarsExpand(v, value, temp, sizeof(value));
- _ippVarsSet(v, name, value);
+ if (_cups_strcasecmp(token, "DEFINE-DEFAULT") || !_ippVarsGet(v, name))
+ {
+ _ippVarsExpand(v, value, temp, sizeof(value));
+ _ippVarsSet(v, name, value);
+ }
}
else
{
* Skip whitespace and comments...
*/
+ DEBUG_printf(("1_ippFileReadToken: linenum=%d, pos=%ld", f->linenum, (long)cupsFileTell(f->fp)));
+
while ((ch = cupsFileGetChar(f->fp)) != EOF)
{
if (_cups_isspace(ch))
*/
if (ch == '\n')
+ {
f->linenum ++;
+ DEBUG_printf(("1_ippFileReadToken: LF in leading whitespace, linenum=%d, pos=%ld", f->linenum, (long)cupsFileTell(f->fp)));
+ }
}
else if (ch == '#')
{
* Comment...
*/
+ DEBUG_puts("1_ippFileReadToken: Skipping comment in leading whitespace...");
+
while ((ch = cupsFileGetChar(f->fp)) != EOF)
{
if (ch == '\n')
}
if (ch == '\n')
+ {
f->linenum ++;
+ DEBUG_printf(("1_ippFileReadToken: LF at end of comment, linenum=%d, pos=%ld", f->linenum, (long)cupsFileTell(f->fp)));
+ }
else
break;
}
while (ch != EOF)
{
if (ch == '\n')
+ {
f->linenum ++;
+ DEBUG_printf(("1_ippFileReadToken: LF in token, linenum=%d, pos=%ld", f->linenum, (long)cupsFileTell(f->fp)));
+ }
if (ch == quote)
{
*/
*tokptr = '\0';
- DEBUG_printf(("1_ippFileReadToken: Returning \"%s\".", token));
+ DEBUG_printf(("1_ippFileReadToken: Returning \"%s\" at closing quote.", token));
return (1);
}
else if (!quote && _cups_isspace(ch))
*/
*tokptr = '\0';
- DEBUG_printf(("1_ippFileReadToken: Returning \"%s\".", token));
+ DEBUG_printf(("1_ippFileReadToken: Returning \"%s\" before whitespace.", token));
return (1);
}
else if (!quote && (ch == '\'' || ch == '\"'))
*/
quote = ch;
+
+ DEBUG_printf(("1_ippFileReadToken: Start of quoted string, quote=%c, pos=%ld", quote, (long)cupsFileTell(f->fp)));
}
else if (!quote && ch == '#')
{
cupsFileSeek(f->fp, cupsFileTell(f->fp) - 1);
*tokptr = '\0';
- DEBUG_printf(("1_ippFileReadToken: Returning \"%s\".", token));
+ DEBUG_printf(("1_ippFileReadToken: Returning \"%s\" before comment.", token));
return (1);
}
else if (!quote && (ch == '{' || ch == '}' || ch == ','))
* Quoted character...
*/
+ DEBUG_printf(("1_ippFileReadToken: Quoted character at pos=%ld", (long)cupsFileTell(f->fp)));
+
if ((ch = cupsFileGetChar(f->fp)) == EOF)
{
*token = '\0';
return (0);
}
else if (ch == '\n')
+ {
f->linenum ++;
+ DEBUG_printf(("1_ippFileReadToken: quoted LF, linenum=%d, pos=%ld", f->linenum, (long)cupsFileTell(f->fp)));
+ }
}
if (tokptr < tokend)
}
*tokptr = '\0';
- DEBUG_printf(("1_ippFileReadToken: Returning \"%s\".", token));
+ DEBUG_printf(("1_ippFileReadToken: Returning \"%s\" at EOF.", token));
return (tokptr > token);
}
return (ippSetInteger(ipp, attr, element, (int)strtol(value, NULL, 0)));
break;
+ case IPP_TAG_DATE :
+ {
+ int year, /* Year */
+ month, /* Month */
+ day, /* Day of month */
+ hour, /* Hour */
+ minute, /* Minute */
+ second, /* Second */
+ utc_offset = 0; /* Timezone offset from UTC */
+ ipp_uchar_t date[11]; /* dateTime value */
+
+ if (sscanf(value, "%d-%d-%dT%d:%d:%d%d", &year, &month, &day, &hour, &minute, &second, &utc_offset) < 6)
+ {
+ report_error(f, v, user_data, "Bad dateTime value \"%s\" on line %d of \"%s\".", value, f->linenum, f->filename);
+ return (0);
+ }
+
+ date[0] = (ipp_uchar_t)(year >> 8);
+ date[1] = (ipp_uchar_t)(year & 255);
+ date[2] = (ipp_uchar_t)month;
+ date[3] = (ipp_uchar_t)day;
+ date[4] = (ipp_uchar_t)hour;
+ date[5] = (ipp_uchar_t)minute;
+ date[6] = (ipp_uchar_t)second;
+ date[7] = 0;
+ if (utc_offset < 0)
+ {
+ utc_offset = -utc_offset;
+ date[8] = (ipp_uchar_t)'-';
+ }
+ else
+ {
+ date[8] = (ipp_uchar_t)'+';
+ }
+
+ date[9] = (ipp_uchar_t)(utc_offset / 100);
+ date[10] = (ipp_uchar_t)(utc_offset % 100);
+
+ return (ippSetDate(ipp, attr, element, date));
+ }
+ break;
+
case IPP_TAG_RESOLUTION :
{
int xres, /* X resolution */