Beispiel #1
0
// ### two-arg-char-equal
Value SYS_two_arg_char_equal(Value arg1, Value arg2)
{
    if (!characterp(arg1))
        return signal_type_error(arg1, S_character);
    if (arg1 == arg2)
        return T;
    if (!characterp(arg2))
        return signal_type_error(arg2, S_character);
    BASE_CHAR c1 = xchar(arg1);
    BASE_CHAR c2 = xchar(arg2);
    if (toupper(c1) == toupper(c2))
        return T;
    return NIL;
}
Beispiel #2
0
// ### char-equal
Value CL_char_equal(unsigned int numargs, Value args[])
{
    switch (numargs)
    {
    case 0:
        return wrong_number_of_arguments(S_char_equal, numargs, 1, MANY);
    case 1:
        if (characterp(args[0]))
            return T;
        else
            return signal_type_error(args[0], S_character);
    case 2:
    {
        if (!characterp(args[0]))
            return signal_type_error(args[0], S_character);
        if (args[0] == args[1])
            return T;
        if (!characterp(args[1]))
            return signal_type_error(args[1], S_character);
        BASE_CHAR c1 = xchar(args[0]);
        BASE_CHAR c2 = xchar(args[1]);
        if (toupper(c1) == toupper(c2))
            return T;
        return NIL;
    }
    default:
    {
        BASE_CHAR c0 = char_value(args[0]);
        for (INDEX i = 1; i < numargs; i++)
        {
            BASE_CHAR c1 = char_value(args[i]);
            if (c0 != c1 && toupper(c0) != toupper(c1))
                return NIL;
        }
        return T;
    }
    }
}
Beispiel #3
0
/* Translate dangerous and some other characters to safe
   %xx form.
*/
void
translate_to_uri(const char * filename, struct esb_s *out)
{
    char buf[8];
    const char *cp = 0;
    for (cp = filename  ; *cp; ++cp) {
        char v[2];
        int c = 0xff & (unsigned char)*cp;
        if (dwarfdump_ctype_table[c]) {
            v[0] = c;
            v[1] = 0;
            esb_append(out,v);
        } else {
            char *b = xchar(c,buf,sizeof(buf));
            esb_append(out,b);
        }
    }
}
Beispiel #4
0
/**
 * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.
 *
 * @param addr ip6 address in network order to convert
 * @param buf target buffer where the string is stored
 * @param buflen length of buf
 * @return either pointer to buf which now holds the ASCII
 *         representation of addr or NULL if buf was too small
 */
char *
ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen)
{
  u32_t current_block_index, current_block_value;
  s32_t zero_flag, i;

  i = 0;
  zero_flag = 0; /* used to indicate a zero chain for "::' */

  for (current_block_index = 0; current_block_index < 8; current_block_index++) {
    /* get the current 16-bit block */
    current_block_value = htonl(addr->addr[current_block_index >> 1]);
    if ((current_block_index & 0x1) == 0) {
      current_block_value = current_block_value >> 16;
    }
    current_block_value &= 0xffff;

    if (current_block_value == 0) {
      /* generate empty block "::" */
      if (!zero_flag) {
        if (current_block_index > 0) {
          zero_flag = 1;
          buf[i++] = ':';
          if (i >= buflen) return NULL;
        }
      }
    }
    else {
      if (current_block_index > 0) {
        buf[i++] = ':';
        if (i >= buflen) return NULL;
      }

      if ((current_block_value & 0xf000) == 0) {
        zero_flag = 1;
      }
      else {
        buf[i++] = xchar(((current_block_value & 0xf000) >> 12));
        zero_flag = 0;
        if (i >= buflen) return NULL;
      }

      if (((current_block_value & 0xf00) == 0) && (zero_flag)) {
        /* do nothing */
      }
      else {
        buf[i++] = xchar(((current_block_value & 0xf00) >> 8));
        zero_flag = 0;
        if (i >= buflen) return NULL;
      }

      if (((current_block_value & 0xf0) == 0) && (zero_flag)) {
        /* do nothing */
      }
      else {
        buf[i++] = xchar(((current_block_value & 0xf0) >> 4));
        zero_flag = 0;
        if (i >= buflen) return NULL;
      }

      buf[i++] = xchar((current_block_value & 0xf));
      if (i >= buflen) return NULL;

      zero_flag = 0;
    }
  }