// ### 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; }
// ### 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; } } }
/* 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); } } }
/** * 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; } }