KDint KD_APIENTRY kdMain(KDint argc, const KDchar *const *argv) { static const KDsize n = 1024 * 1000; for(KDsize i = 1; i < n; i = i + 1024) { KDchar buf[512]; kdSnprintfKHR(buf, sizeof(buf), "%zu.%zu", i, i + 1); KDfloat32 f = kdStrtof(buf, KD_NULL); TEST_EXPR(f > 0.0); KDfloat64KHR d = kdStrtodKHR(buf, KD_NULL); TEST_EXPR(d > 0.0); } return 0; }
/** * htmlSetMetaEncoding: * @doc: the document * @encoding: the encoding string * * Sets the current encoding in the Meta tags * NOTE: this will not change the document content encoding, just * the META flag associated. * * Returns 0 in case of success and -1 in case of error */ int htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { htmlNodePtr cur, meta = KD_NULL, head = KD_NULL; const xmlChar *content = KD_NULL; char newcontent[100]; if (doc == KD_NULL) return(-1); /* html isn't a real encoding it's just libxml2 way to get entities */ if (!xmlStrcasecmp(encoding, BAD_CAST "html")) return(-1); if (encoding != KD_NULL) { kdSnprintfKHR (newcontent, sizeof(newcontent), "text/html; charset=%s", (char *)encoding); newcontent[sizeof(newcontent) - 1] = 0; } cur = doc->children; /* * Search the html */ while (cur != KD_NULL) { if ((cur->type == XML_ELEMENT_NODE) && (cur->name != KD_NULL)) { if (xmlStrcasecmp(cur->name, BAD_CAST"html") == 0) break; if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0) goto found_head; if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) goto found_meta; } cur = cur->next; } if (cur == KD_NULL) return(-1); cur = cur->children; /* * Search the head */ while (cur != KD_NULL) { if ((cur->type == XML_ELEMENT_NODE) && (cur->name != KD_NULL)) { if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0) break; if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) { head = cur->parent; goto found_meta; } } cur = cur->next; } if (cur == KD_NULL) return(-1); found_head: head = cur; if (cur->children == KD_NULL) goto create; cur = cur->children; found_meta: /* * Search and update all the remaining the meta elements carrying * encoding informations */ while (cur != KD_NULL) { if ((cur->type == XML_ELEMENT_NODE) && (cur->name != KD_NULL)) { if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) { xmlAttrPtr attr = cur->properties; int http; const xmlChar *value; content = KD_NULL; http = 0; while (attr != KD_NULL) { if ((attr->children != KD_NULL) && (attr->children->type == XML_TEXT_NODE) && (attr->children->next == KD_NULL)) { value = attr->children->content; if ((!xmlStrcasecmp(attr->name, BAD_CAST"http-equiv")) && (!xmlStrcasecmp(value, BAD_CAST"Content-Type"))) http = 1; else { if ((value != KD_NULL) && (!xmlStrcasecmp(attr->name, BAD_CAST"content"))) content = value; } if ((http != 0) && (content != KD_NULL)) break; } attr = attr->next; } if ((http != 0) && (content != KD_NULL)) { meta = cur; break; } } } cur = cur->next; } create: if (meta == KD_NULL) { if ((encoding != KD_NULL) && (head != KD_NULL)) { /* * Create a new Meta element with the right attributes */ meta = xmlNewDocNode(doc, KD_NULL, BAD_CAST"meta", KD_NULL); if (head->children == KD_NULL) xmlAddChild(head, meta); else xmlAddPrevSibling(head->children, meta); xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type"); xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent); } } else { /* change the document only if there is a real encoding change */ if (xmlStrcasestr(content, encoding) == KD_NULL) { xmlSetProp(meta, BAD_CAST"content", BAD_CAST newcontent); } } return(0); }