mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-26 00:37:43 +03:00
Fix pointer/int cast warnings on 64-bit Windows
On 64-bit Windows, `long` is 32 bits wide and can't hold a pointer. Switch to ptrdiff_t instead which should be the same size as a pointer on every somewhat sane platform without requiring C99 types like intptr_t. Fixes bug 788312. Thanks to J. Peter Mugaas for the report and initial patch.
This commit is contained in:
3
SAX2.c
3
SAX2.c
@@ -12,6 +12,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
#include <libxml/xmlmemory.h>
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>
|
||||
@@ -1914,7 +1915,7 @@ skip:
|
||||
else {
|
||||
ret->line = 65535;
|
||||
if (ctxt->options & XML_PARSE_BIG_LINES)
|
||||
ret->psvi = (void *) (long) ctxt->input->line;
|
||||
ret->psvi = (void *) (ptrdiff_t) ctxt->input->line;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
17
parser.c
17
parser.c
@@ -1335,7 +1335,7 @@ xmlAddSpecialAttr(xmlParserCtxtPtr ctxt,
|
||||
return;
|
||||
|
||||
xmlHashAddEntry2(ctxt->attsSpecial, fullname, fullattr,
|
||||
(void *) (long) type);
|
||||
(void *) (ptrdiff_t) type);
|
||||
return;
|
||||
|
||||
mem_error:
|
||||
@@ -1354,7 +1354,7 @@ xmlCleanSpecialAttrCallback(void *payload, void *data,
|
||||
const xmlChar *unused ATTRIBUTE_UNUSED) {
|
||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) data;
|
||||
|
||||
if (((long) payload) == XML_ATTRIBUTE_CDATA) {
|
||||
if (((ptrdiff_t) payload) == XML_ATTRIBUTE_CDATA) {
|
||||
xmlHashRemoveEntry2(ctxt->attsSpecial, fullname, fullattr, NULL);
|
||||
}
|
||||
}
|
||||
@@ -1866,7 +1866,7 @@ nameNsPush(xmlParserCtxtPtr ctxt, const xmlChar * value,
|
||||
ctxt->name = value;
|
||||
ctxt->pushTab[ctxt->nameNr * 3] = (void *) prefix;
|
||||
ctxt->pushTab[ctxt->nameNr * 3 + 1] = (void *) URI;
|
||||
ctxt->pushTab[ctxt->nameNr * 3 + 2] = (void *) (long) nsNr;
|
||||
ctxt->pushTab[ctxt->nameNr * 3 + 2] = (void *) (ptrdiff_t) nsNr;
|
||||
return (ctxt->nameNr++);
|
||||
mem_error:
|
||||
xmlErrMemory(ctxt, NULL);
|
||||
@@ -9070,8 +9070,8 @@ xmlParseAttribute2(xmlParserCtxtPtr ctxt,
|
||||
if (ctxt->attsSpecial != NULL) {
|
||||
int type;
|
||||
|
||||
type = (int) (long) xmlHashQLookup2(ctxt->attsSpecial,
|
||||
pref, elem, *prefix, name);
|
||||
type = (int) (ptrdiff_t) xmlHashQLookup2(ctxt->attsSpecial,
|
||||
pref, elem, *prefix, name);
|
||||
if (type != 0)
|
||||
normalize = 1;
|
||||
}
|
||||
@@ -11532,9 +11532,10 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
|
||||
}
|
||||
if (ctxt->sax2) {
|
||||
xmlParseEndTag2(ctxt,
|
||||
(void *) ctxt->pushTab[ctxt->nameNr * 3 - 3],
|
||||
(void *) ctxt->pushTab[ctxt->nameNr * 3 - 2], 0,
|
||||
(int) (long) ctxt->pushTab[ctxt->nameNr * 3 - 1], 0);
|
||||
(void *) ctxt->pushTab[ctxt->nameNr * 3 - 3],
|
||||
(void *) ctxt->pushTab[ctxt->nameNr * 3 - 2], 0,
|
||||
(int) (ptrdiff_t)
|
||||
ctxt->pushTab[ctxt->nameNr * 3 - 1], 0);
|
||||
nameNsPop(ctxt);
|
||||
}
|
||||
#ifdef LIBXML_SAX1_ENABLED
|
||||
|
||||
13
relaxng.c
13
relaxng.c
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <libxml/xmlmemory.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/parserInternals.h>
|
||||
@@ -4404,7 +4405,7 @@ xmlRelaxNGComputeInterleaves(xmlRelaxNGDefinePtr def,
|
||||
if ((*tmp)->type == XML_RELAXNG_TEXT) {
|
||||
res = xmlHashAddEntry2(partitions->triage,
|
||||
BAD_CAST "#text", NULL,
|
||||
(void *) (long) (i + 1));
|
||||
(void *) (ptrdiff_t) (i + 1));
|
||||
if (res != 0)
|
||||
is_determinist = -1;
|
||||
} else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
|
||||
@@ -4412,22 +4413,22 @@ xmlRelaxNGComputeInterleaves(xmlRelaxNGDefinePtr def,
|
||||
if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
|
||||
res = xmlHashAddEntry2(partitions->triage,
|
||||
(*tmp)->name, NULL,
|
||||
(void *) (long) (i + 1));
|
||||
(void *) (ptrdiff_t) (i + 1));
|
||||
else
|
||||
res = xmlHashAddEntry2(partitions->triage,
|
||||
(*tmp)->name, (*tmp)->ns,
|
||||
(void *) (long) (i + 1));
|
||||
(void *) (ptrdiff_t) (i + 1));
|
||||
if (res != 0)
|
||||
is_determinist = -1;
|
||||
} else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
|
||||
if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
|
||||
res = xmlHashAddEntry2(partitions->triage,
|
||||
BAD_CAST "#any", NULL,
|
||||
(void *) (long) (i + 1));
|
||||
(void *) (ptrdiff_t) (i + 1));
|
||||
else
|
||||
res = xmlHashAddEntry2(partitions->triage,
|
||||
BAD_CAST "#any", (*tmp)->ns,
|
||||
(void *) (long) (i + 1));
|
||||
(void *) (ptrdiff_t) (i + 1));
|
||||
if ((*tmp)->nameClass != NULL)
|
||||
is_determinist = 2;
|
||||
if (res != 0)
|
||||
@@ -9387,7 +9388,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
|
||||
if (tmp == NULL) {
|
||||
i = nbgroups;
|
||||
} else {
|
||||
i = ((long) tmp) - 1;
|
||||
i = ((ptrdiff_t) tmp) - 1;
|
||||
if (partitions->flags & IS_NEEDCHECK) {
|
||||
group = partitions->groups[i];
|
||||
if (!xmlRelaxNGNodeMatchesList(cur, group->defs))
|
||||
|
||||
3
tree.c
3
tree.c
@@ -19,6 +19,7 @@
|
||||
#include "libxml.h"
|
||||
|
||||
#include <string.h> /* for memset() only ! */
|
||||
#include <stddef.h>
|
||||
#include <limits.h>
|
||||
#ifdef HAVE_CTYPE_H
|
||||
#include <ctype.h>
|
||||
@@ -4605,7 +4606,7 @@ xmlGetLineNoInternal(const xmlNode *node, int depth)
|
||||
(node->type == XML_PI_NODE)) {
|
||||
if (node->line == 65535) {
|
||||
if ((node->type == XML_TEXT_NODE) && (node->psvi != NULL))
|
||||
result = (long) node->psvi;
|
||||
result = (long) (ptrdiff_t) node->psvi;
|
||||
else if ((node->type == XML_ELEMENT_NODE) &&
|
||||
(node->children != NULL))
|
||||
result = xmlGetLineNoInternal(node->children, depth + 1);
|
||||
|
||||
11
xmlIO.c
11
xmlIO.c
@@ -12,6 +12,7 @@
|
||||
#include "libxml.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
#ifdef HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
#endif
|
||||
@@ -826,7 +827,7 @@ static int
|
||||
xmlFdRead (void * context, char * buffer, int len) {
|
||||
int ret;
|
||||
|
||||
ret = read((int) (long) context, &buffer[0], len);
|
||||
ret = read((int) (ptrdiff_t) context, &buffer[0], len);
|
||||
if (ret < 0) xmlIOErr(0, "read()");
|
||||
return(ret);
|
||||
}
|
||||
@@ -847,7 +848,7 @@ xmlFdWrite (void * context, const char * buffer, int len) {
|
||||
int ret = 0;
|
||||
|
||||
if (len > 0) {
|
||||
ret = write((int) (long) context, &buffer[0], len);
|
||||
ret = write((int) (ptrdiff_t) context, &buffer[0], len);
|
||||
if (ret < 0) xmlIOErr(0, "write()");
|
||||
}
|
||||
return(ret);
|
||||
@@ -865,7 +866,7 @@ xmlFdWrite (void * context, const char * buffer, int len) {
|
||||
static int
|
||||
xmlFdClose (void * context) {
|
||||
int ret;
|
||||
ret = close((int) (long) context);
|
||||
ret = close((int) (ptrdiff_t) context);
|
||||
if (ret < 0) xmlIOErr(0, "close()");
|
||||
return(ret);
|
||||
}
|
||||
@@ -3008,7 +3009,7 @@ xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc) {
|
||||
|
||||
ret = xmlAllocParserInputBuffer(enc);
|
||||
if (ret != NULL) {
|
||||
ret->context = (void *) (long) fd;
|
||||
ret->context = (void *) (ptrdiff_t) fd;
|
||||
ret->readcallback = xmlFdRead;
|
||||
ret->closecallback = xmlFdClose;
|
||||
}
|
||||
@@ -3114,7 +3115,7 @@ xmlOutputBufferCreateFd(int fd, xmlCharEncodingHandlerPtr encoder) {
|
||||
|
||||
ret = xmlAllocOutputBufferInternal(encoder);
|
||||
if (ret != NULL) {
|
||||
ret->context = (void *) (long) fd;
|
||||
ret->context = (void *) (ptrdiff_t) fd;
|
||||
ret->writecallback = xmlFdWrite;
|
||||
ret->closecallback = NULL;
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@ xmlMemFree(void *ptr)
|
||||
|
||||
error:
|
||||
xmlGenericError(xmlGenericErrorContext,
|
||||
"xmlMemFree(%lX) error\n", (unsigned long) ptr);
|
||||
"xmlMemFree(%p) error\n", ptr);
|
||||
xmlMallocBreakpoint();
|
||||
return;
|
||||
}
|
||||
|
||||
55
xpath.c
55
xpath.c
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
@@ -159,7 +160,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
int misc = 0, precedence1 = 0, precedence2 = 0;
|
||||
xmlNodePtr miscNode1 = NULL, miscNode2 = NULL;
|
||||
xmlNodePtr cur, root;
|
||||
long l1, l2;
|
||||
ptrdiff_t l1, l2;
|
||||
|
||||
if ((node1 == NULL) || (node2 == NULL))
|
||||
return(-2);
|
||||
@@ -173,12 +174,12 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
switch (node1->type) {
|
||||
case XML_ELEMENT_NODE:
|
||||
if (node2->type == XML_ELEMENT_NODE) {
|
||||
if ((0 > (long) node1->content) && /* TODO: Would a != 0 suffice here? */
|
||||
(0 > (long) node2->content) &&
|
||||
if ((0 > (ptrdiff_t) node1->content) &&
|
||||
(0 > (ptrdiff_t) node2->content) &&
|
||||
(node1->doc == node2->doc))
|
||||
{
|
||||
l1 = -((long) node1->content);
|
||||
l2 = -((long) node2->content);
|
||||
l1 = -((ptrdiff_t) node1->content);
|
||||
l2 = -((ptrdiff_t) node2->content);
|
||||
if (l1 < l2)
|
||||
return(1);
|
||||
if (l1 > l2)
|
||||
@@ -223,7 +224,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
node1 = node1->parent;
|
||||
}
|
||||
if ((node1 == NULL) || (node1->type != XML_ELEMENT_NODE) ||
|
||||
(0 <= (long) node1->content)) {
|
||||
(0 <= (ptrdiff_t) node1->content)) {
|
||||
/*
|
||||
* Fallback for whatever case.
|
||||
*/
|
||||
@@ -273,7 +274,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
node2 = node2->parent;
|
||||
}
|
||||
if ((node2 == NULL) || (node2->type != XML_ELEMENT_NODE) ||
|
||||
(0 <= (long) node2->content))
|
||||
(0 <= (ptrdiff_t) node2->content))
|
||||
{
|
||||
node2 = miscNode2;
|
||||
precedence2 = 0;
|
||||
@@ -346,12 +347,12 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
*/
|
||||
if ((node1->type == XML_ELEMENT_NODE) &&
|
||||
(node2->type == XML_ELEMENT_NODE) &&
|
||||
(0 > (long) node1->content) &&
|
||||
(0 > (long) node2->content) &&
|
||||
(0 > (ptrdiff_t) node1->content) &&
|
||||
(0 > (ptrdiff_t) node2->content) &&
|
||||
(node1->doc == node2->doc)) {
|
||||
|
||||
l1 = -((long) node1->content);
|
||||
l2 = -((long) node2->content);
|
||||
l1 = -((ptrdiff_t) node1->content);
|
||||
l2 = -((ptrdiff_t) node2->content);
|
||||
if (l1 < l2)
|
||||
return(1);
|
||||
if (l1 > l2)
|
||||
@@ -414,12 +415,12 @@ turtle_comparison:
|
||||
*/
|
||||
if ((node1->type == XML_ELEMENT_NODE) &&
|
||||
(node2->type == XML_ELEMENT_NODE) &&
|
||||
(0 > (long) node1->content) &&
|
||||
(0 > (long) node2->content) &&
|
||||
(0 > (ptrdiff_t) node1->content) &&
|
||||
(0 > (ptrdiff_t) node2->content) &&
|
||||
(node1->doc == node2->doc)) {
|
||||
|
||||
l1 = -((long) node1->content);
|
||||
l2 = -((long) node2->content);
|
||||
l1 = -((ptrdiff_t) node1->content);
|
||||
l2 = -((ptrdiff_t) node2->content);
|
||||
if (l1 < l2)
|
||||
return(1);
|
||||
if (l1 > l2)
|
||||
@@ -3239,7 +3240,7 @@ xmlXPathFormatNumber(double number, char buffer[], int buffersize)
|
||||
*/
|
||||
long
|
||||
xmlXPathOrderDocElems(xmlDocPtr doc) {
|
||||
long count = 0;
|
||||
ptrdiff_t count = 0;
|
||||
xmlNodePtr cur;
|
||||
|
||||
if (doc == NULL)
|
||||
@@ -3271,7 +3272,7 @@ xmlXPathOrderDocElems(xmlDocPtr doc) {
|
||||
}
|
||||
} while (cur != NULL);
|
||||
}
|
||||
return(count);
|
||||
return((long) count);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3339,13 +3340,13 @@ xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
*/
|
||||
if ((node1->type == XML_ELEMENT_NODE) &&
|
||||
(node2->type == XML_ELEMENT_NODE) &&
|
||||
(0 > (long) node1->content) &&
|
||||
(0 > (long) node2->content) &&
|
||||
(0 > (ptrdiff_t) node1->content) &&
|
||||
(0 > (ptrdiff_t) node2->content) &&
|
||||
(node1->doc == node2->doc)) {
|
||||
long l1, l2;
|
||||
ptrdiff_t l1, l2;
|
||||
|
||||
l1 = -((long) node1->content);
|
||||
l2 = -((long) node2->content);
|
||||
l1 = -((ptrdiff_t) node1->content);
|
||||
l2 = -((ptrdiff_t) node2->content);
|
||||
if (l1 < l2)
|
||||
return(1);
|
||||
if (l1 > l2)
|
||||
@@ -3402,13 +3403,13 @@ xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
|
||||
*/
|
||||
if ((node1->type == XML_ELEMENT_NODE) &&
|
||||
(node2->type == XML_ELEMENT_NODE) &&
|
||||
(0 > (long) node1->content) &&
|
||||
(0 > (long) node2->content) &&
|
||||
(0 > (ptrdiff_t) node1->content) &&
|
||||
(0 > (ptrdiff_t) node2->content) &&
|
||||
(node1->doc == node2->doc)) {
|
||||
long l1, l2;
|
||||
ptrdiff_t l1, l2;
|
||||
|
||||
l1 = -((long) node1->content);
|
||||
l2 = -((long) node2->content);
|
||||
l1 = -((ptrdiff_t) node1->content);
|
||||
l2 = -((ptrdiff_t) node2->content);
|
||||
if (l1 < l2)
|
||||
return(1);
|
||||
if (l1 > l2)
|
||||
|
||||
Reference in New Issue
Block a user