pike.git / src / builtin_functions.c

version» Context lines:

pike.git/src/builtin_functions.c:5996: Inside #if SIZEOF_TIME_T > SIZEOF_INT_TYPE
   pop_n_elems(args);   #if SIZEOF_TIME_T > SIZEOF_INT_TYPE    push_int64 (retval);   #else    push_int(retval);   #endif   }   #define GOT_F_MKTIME   #endif /* HAVE_MKTIME || HAVE_LOCALTIME */    - /* Parse a sprintf/sscanf-style format string */ - static ptrdiff_t low_parse_format(p_wchar0 *s, ptrdiff_t slen) - { -  ptrdiff_t i; -  ptrdiff_t offset = 0; -  struct svalue *old_sp = Pike_sp; -  -  for (i=offset; i < slen; i++) { -  if (s[i] == '%') { -  ptrdiff_t j; -  if (i != offset) { -  push_string(make_shared_binary_string0(s + offset, i)); -  if ((Pike_sp != old_sp+1) && (TYPEOF(Pike_sp[-2]) == T_STRING)) { -  /* Concat. */ -  f_add(2); -  } -  } -  -  for (j = i+1;j<slen;j++) { -  int c = s[j]; -  -  switch(c) { -  /* Flags */ -  case '!': -  case '#': -  case '$': -  case '-': -  case '/': -  case '0': -  case '=': -  case '>': -  case '@': -  case '^': -  case '_': -  case '|': -  continue; -  /* Padding */ -  case ' ': -  case '\'': -  case '+': -  case '~': -  continue; -  /* Attributes */ -  case '.': -  case ':': -  case ';': -  continue; -  /* Attribute value */ -  case '1': case '2': case '3': case '4': case '5': -  case '6': case '7': case '8': case '9': -  continue; -  /* Specials */ -  case '%': -  push_constant_text("%"); -  if ((Pike_sp != old_sp+1) && (TYPEOF(Pike_sp[-2]) == T_STRING)) { -  /* Concat. */ -  f_add(2); -  } -  break; -  case '{': -  i = j + 1 + low_parse_format(s + j + 1, slen - (j+1)); -  f_aggregate(1); -  if ((i + 2 >= slen) || (s[i] != '%') || (s[i+1] != '}')) { -  Pike_error("parse_format(): Expected %%}.\n"); -  } -  i += 2; -  break; -  case '}': -  f_aggregate(DO_NOT_WARN(Pike_sp - old_sp)); -  return i; -  /* Set */ -  case '[': -  -  break; -  /* Argument */ -  default: -  break; -  } -  break; -  } -  if (j == slen) { -  Pike_error("parse_format(): Unterminated %%-expression.\n"); -  } -  offset = i = j; -  } -  } -  -  if (i != offset) { -  push_string(make_shared_binary_string0(s + offset, i)); -  if ((Pike_sp != old_sp+1) && (TYPEOF(Pike_sp[-2]) == T_STRING)) { -  /* Concat. */ -  f_add(2); -  } -  } -  -  f_aggregate(DO_NOT_WARN(Pike_sp - old_sp)); -  return i; - } -  - /** @decl array parse_format(string fmt) -  ** -  ** Parses a sprintf/sscanf-style format string -  */ - static void f_parse_format(INT32 args) - { -  struct pike_string *s = NULL; -  struct array *a; -  ptrdiff_t len; -  -  get_all_args("parse_format", args, "%W", &s); -  -  len = low_parse_format(STR0(s), s->len); -  if (len != s->len) { -  Pike_error("parse_format(): Unexpected %%} in format string at offset %ld\n", -  PTRDIFF_T_TO_LONG(len)); -  } - #ifdef PIKE_DEBUG -  if (TYPEOF(Pike_sp[-1]) != T_ARRAY) { -  Pike_fatal("parse_format(): Unexpected result from low_parse_format()\n"); -  } - #endif /* PIKE_DEBUG */ -  a = (--Pike_sp)->u.array; -  debug_malloc_touch(a); -  -  pop_n_elems(args); -  push_array(a); - } -  +    /* Common case: both strings are 8bit. */   static int does_match_8_8( const unsigned char *s, int j, int sl,    const unsigned char *m, int i, int ml)   {    for (; i<ml; i++)    {    switch (m[i])    {    case '?':    if(j++>=sl) return 0;