1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2024-10-26 03:55:04 +03:00

error: Make xmlLastError const

This commit is contained in:
Nick Wellnhofer 2024-07-15 19:43:28 +02:00
parent eb66d03ef7
commit 79e119954c
4 changed files with 49 additions and 15 deletions

20
error.c
View File

@ -17,6 +17,7 @@
#include <libxml/xmlmemory.h>
#include "private/error.h"
#include "private/globals.h"
#include "private/string.h"
/************************************************************************
@ -635,7 +636,7 @@ void
xmlRaiseMemoryError(xmlStructuredErrorFunc schannel, xmlGenericErrorFunc channel,
void *data, int domain, xmlError *error)
{
xmlError *lastError = &xmlLastError;
xmlError *lastError = xmlGetLastErrorInternal();
xmlResetLastError();
lastError->domain = domain;
@ -694,7 +695,7 @@ xmlVRaiseError(xmlStructuredErrorFunc schannel,
{
xmlParserCtxtPtr ctxt = NULL;
/* xmlLastError is a macro retrieving the per-thread global. */
xmlErrorPtr lastError = &xmlLastError;
xmlErrorPtr lastError = xmlGetLastErrorInternal();
xmlErrorPtr to = lastError;
if (code == XML_ERR_OK)
@ -919,9 +920,11 @@ xmlParserValidityWarning(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...)
const xmlError *
xmlGetLastError(void)
{
if (xmlLastError.code == XML_ERR_OK)
return (NULL);
return (&xmlLastError);
const xmlError *error = xmlGetLastErrorInternal();
if (error->code == XML_ERR_OK)
return(NULL);
return(error);
}
/**
@ -960,9 +963,10 @@ xmlResetError(xmlErrorPtr err)
void
xmlResetLastError(void)
{
if (xmlLastError.code == XML_ERR_OK)
return;
xmlResetError(&xmlLastError);
xmlError *error = xmlGetLastErrorInternal();
if (error->code != XML_ERR_OK)
xmlResetError(error);
}
/**

View File

@ -79,6 +79,8 @@ struct _xmlGlobalState {
unsigned localRngState[2];
#endif
xmlError lastError;
#define XML_OP XML_DECLARE_MEMBER
XML_GLOBALS_ALLOC
XML_GLOBALS_ERROR
@ -679,7 +681,7 @@ xmlFreeGlobalState(void *state)
* But the xmlError struct is fully public and widely used,
* so changes are dangerous.
*/
xmlResetError(&(gs->gs_xmlLastError));
xmlResetError(&gs->lastError);
#ifndef USE_TLS
free(state);
#endif
@ -723,10 +725,10 @@ static void
xmlInitGlobalState(xmlGlobalStatePtr gs) {
xmlMutexLock(&xmlThrDefMutex);
#ifdef LIBXML_THREAD_ENABLED
gs->localRngState[0] = xmlGlobalRandom();
gs->localRngState[1] = xmlGlobalRandom();
#endif
memset(&gs->lastError, 0, sizeof(xmlError));
gs->gs_xmlDoValidityCheckingDefaultValue =
xmlDoValidityCheckingDefaultValueThrDef;
@ -761,7 +763,6 @@ xmlInitGlobalState(xmlGlobalStatePtr gs) {
xmlParserInputBufferCreateFilenameValueThrDef;
gs->gs_xmlOutputBufferCreateFilenameValue =
xmlOutputBufferCreateFilenameValueThrDef;
memset(&gs->gs_xmlLastError, 0, sizeof(xmlError));
xmlMutexUnlock(&xmlThrDefMutex);
@ -857,7 +858,14 @@ XML_GLOBALS_PARSER
XML_GLOBALS_TREE
#undef XML_OP
#ifdef LIBXML_THREAD_ENABLED
const xmlError *
__xmlLastError(void) {
if (IS_MAIN_THREAD)
return(&xmlLastError);
else
return(&xmlGetThreadLocalStorage(0)->lastError);
}
/**
* xmlGetLocalRngState:
*
@ -870,7 +878,6 @@ xmlGetLocalRngState(void) {
else
return(xmlGetThreadLocalStorage(0)->localRngState);
}
#endif
/* For backward compatibility */
@ -941,6 +948,18 @@ xmlCheckThreadLocalStorage(void) {
return(0);
}
xmlError *
xmlGetLastErrorInternal(void) {
#ifdef LIBXML_THREAD_ENABLED
if (IS_MAIN_THREAD)
return(&xmlLastError);
else
return(&xmlGetThreadLocalStorage(0)->lastError);
#else
return(&xmlLastError);
#endif
}
/** DOC_DISABLE */
/**

View File

@ -865,8 +865,16 @@ typedef void (*xmlGenericErrorFunc) (void *ctx,
typedef void (*xmlStructuredErrorFunc) (void *userData, const xmlError *error);
/** DOC_DISABLE */
#if defined(LIBXML_THREAD_ENABLED)
XML_DEPRECATED
XMLPUBFUN const xmlError *
__xmlLastError(void);
#elif !defined(IN_LIBXML)
XML_DEPRECATED
XMLPUBVAR const xmlError xmlLastError;
#endif
#define XML_GLOBALS_ERROR \
XML_OP(xmlLastError, xmlError, XML_DEPRECATED) \
XML_OP(xmlGenericError, xmlGenericErrorFunc, XML_NO_ATTR) \
XML_OP(xmlGenericErrorContext, void *, XML_NO_ATTR) \
XML_OP(xmlStructuredError, xmlStructuredErrorFunc, XML_NO_ATTR) \

View File

@ -6,6 +6,9 @@ xmlInitGlobalsInternal(void);
XML_HIDDEN void
xmlCleanupGlobalsInternal(void);
XML_HIDDEN xmlError *
xmlGetLastErrorInternal(void);
#ifdef LIBXML_THREAD_ENABLED
XML_HIDDEN unsigned *
xmlGetLocalRngState(void);