]> granicus.if.org Git - python/commitdiff
initpyexpat(): Code cleanup; makes it more robust and reduces warnings.
authorFred Drake <fdrake@acm.org>
Fri, 25 Aug 2000 18:03:30 +0000 (18:03 +0000)
committerFred Drake <fdrake@acm.org>
Fri, 25 Aug 2000 18:03:30 +0000 (18:03 +0000)
                Added prototype to remove yet another warning.

Make a number of the handlers and helpers "static" since they are not
used in other C source files.  This also reduces the number of warnings.

Make a lot of the code "more Python".  (Need to get the style guide done!)

Modules/pyexpat.c

index 2b8d03e4b900d319f8162bb867284be92cc3b05a..8b29d4b5ade8f1a8dde8d07d5c093a64f2cd19c9 100644 (file)
@@ -57,7 +57,7 @@ typedef struct {
 
 staticforward PyTypeObject Xmlparsetype;
 
-typedef void (*xmlhandlersetter)( XML_Parser *self, void *meth );
+typedef void (*xmlhandlersetter)(XML_Parser *self, void *meth);
 typedef void* xmlhandler;
 
 struct HandlerInfo {
@@ -178,42 +178,50 @@ conv_string_len_to_unicode(const XML_Char *str, int len)
         Py_INCREF(Py_None);
         return Py_None;
     }
-    return PyUnicode_DecodeUTF8((const char *)str, 
-                                len, 
-                                "strict");
+    return PyUnicode_DecodeUTF8((const char *)str, len, "strict");
 }
 #endif
 
 /* Convert a string of XML_Chars into an 8-bit Python string.
    Returns None if str is a null pointer. */
 
-static PyObject *conv_string_to_utf8( XML_Char *str ) {
-  /* XXX currently this code assumes that XML_Char is 8-bit, 
-     and hence in UTF-8.  */
-  /* UTF-8 from Expat, UTF-8 desired */
-  if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
-  return PyString_FromString( (const char *)str );
+static PyObject *
+conv_string_to_utf8(XML_Char *str)
+{
+    /* XXX currently this code assumes that XML_Char is 8-bit, 
+       and hence in UTF-8.  */
+    /* UTF-8 from Expat, UTF-8 desired */
+    if (str == NULL) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+    return PyString_FromString((const char *)str);
 }
 
-static PyObject *conv_string_len_to_utf8( const XML_Char *str, 
-                                         int len 
+static PyObject *
+conv_string_len_to_utf8(const XML_Char *str,  int len
 {
-  /* XXX currently this code assumes that XML_Char is 8-bit, 
-     and hence in UTF-8.  */
-  /* UTF-8 from Expat, UTF-8 desired */
-  if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
-  return PyString_FromStringAndSize( (const char *)str, len );
+    /* XXX currently this code assumes that XML_Char is 8-bit, 
+       and hence in UTF-8.  */
+    /* UTF-8 from Expat, UTF-8 desired */
+    if (str == NULL) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+    return PyString_FromStringAndSize((const char *)str, len);
 }
 
 /* Callback routines */
 
-static void clear_handlers( xmlparseobject *self );
+static void clear_handlers(xmlparseobject *self);
 
-static void flag_error( xmlparseobject *self ){
-       clear_handlers(self);
+static void
+flag_error(xmlparseobject *self)
+{
+    clear_handlers(self);
 }
 
-#define RC_HANDLER( RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \
+#define RC_HANDLER(RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \
                RETURN, GETUSERDATA) \
 \
 static RC my_##NAME##Handler PARAMS {\
@@ -229,7 +237,7 @@ static RC my_##NAME##Handler PARAMS {\
                rv = PyEval_CallObject(self->handlers[NAME], args); \
                Py_DECREF(args); \
                if (rv == NULL) { \
-                       flag_error( self ); \
+                       flag_error(self); \
                        return RETURN; \
                } \
                CONVERSION \
@@ -246,53 +254,53 @@ static RC my_##NAME##Handler PARAMS {\
                           ? conv_string_to_unicode : conv_string_to_utf8)
 #endif
 
-#define VOID_HANDLER( NAME, PARAMS, PARAM_FORMAT ) \
-       RC_HANDLER( void, NAME, PARAMS, ;, PARAM_FORMAT, ;, ;,\
-       (xmlparseobject *)userData )
+#define VOID_HANDLER(NAME, PARAMS, PARAM_FORMAT) \
+       RC_HANDLER(void, NAME, PARAMS, ;, PARAM_FORMAT, ;, ;,\
+       (xmlparseobject *)userData)
 
-#define INT_HANDLER( NAME, PARAMS, PARAM_FORMAT )\
-       RC_HANDLER( int, NAME, PARAMS, int rc=0;, PARAM_FORMAT,  \
-                       rc = PyInt_AsLong( rv );, rc, \
-       (xmlparseobject *)userData )
+#define INT_HANDLER(NAME, PARAMS, PARAM_FORMAT)\
+       RC_HANDLER(int, NAME, PARAMS, int rc=0;, PARAM_FORMAT, \
+                       rc = PyInt_AsLong(rv);, rc, \
+       (xmlparseobject *)userData)
 
 #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6
-VOID_HANDLER( StartElement, 
-               (void *userData, const XML_Char *name, const XML_Char **atts ), 
+VOID_HANDLER(StartElement, 
+               (void *userData, const XML_Char *name, const XML_Char **atts), 
                 ("(O&O&)", STRING_CONV_FUNC, name, 
                 conv_atts_using_string, atts ) )
 #else
 /* Python 1.6 and later */
-VOID_HANDLER( StartElement, 
-               (void *userData, const XML_Char *name, const XML_Char **atts ), 
+VOID_HANDLER(StartElement, 
+               (void *userData, const XML_Char *name, const XML_Char **atts), 
                 ("(O&O&)", STRING_CONV_FUNC, name, 
                 (self->returns_unicode  
                  ? conv_atts_using_unicode 
-                 : conv_atts_using_string), atts ) )
+                 : conv_atts_using_string), atts))
 #endif
 
-VOID_HANDLER( EndElement, 
-               (void *userData, const XML_Char *name ), 
-                ("(O&)", STRING_CONV_FUNC, name) )
+VOID_HANDLER(EndElement, 
+               (void *userData, const XML_Char *name), 
+                ("(O&)", STRING_CONV_FUNC, name))
 
-VOID_HANDLER( ProcessingInstruction,
+VOID_HANDLER(ProcessingInstruction,
                (void *userData, 
                const XML_Char *target, 
                const XML_Char *data),
-                ("(O&O&)",STRING_CONV_FUNC,target, STRING_CONV_FUNC,data ))
+                ("(O&O&)",STRING_CONV_FUNC,target, STRING_CONV_FUNC,data))
 
 #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6
-VOID_HANDLER( CharacterData, 
+VOID_HANDLER(CharacterData, 
              (void *userData, const XML_Char *data, int len), 
-             ("(O)", conv_string_len_to_utf8(data,len) ) )
+             ("(O)", conv_string_len_to_utf8(data,len)))
 #else
-VOID_HANDLER( CharacterData, 
+VOID_HANDLER(CharacterData, 
              (void *userData, const XML_Char *data, int len), 
              ("(O)", (self->returns_unicode 
                       ? conv_string_len_to_unicode(data,len) 
-                      : conv_string_len_to_utf8(data,len) ) ) )
+                      : conv_string_len_to_utf8(data,len))))
 #endif
 
-VOID_HANDLER( UnparsedEntityDecl,
+VOID_HANDLER(UnparsedEntityDecl,
                (void *userData, 
                        const XML_Char *entityName,
                        const XML_Char *base,
@@ -304,7 +312,7 @@ VOID_HANDLER( UnparsedEntityDecl,
                 STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId, 
                 STRING_CONV_FUNC,notationName))
 
-VOID_HANDLER( NotationDecl, 
+VOID_HANDLER(NotationDecl, 
                (void *userData,
                        const XML_Char *notationName,
                        const XML_Char *base,
@@ -314,56 +322,56 @@ VOID_HANDLER( NotationDecl,
                 STRING_CONV_FUNC,notationName, STRING_CONV_FUNC,base, 
                 STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId))
 
-VOID_HANDLER( StartNamespaceDecl,
+VOID_HANDLER(StartNamespaceDecl,
                (void *userData,
                      const XML_Char *prefix,
                      const XML_Char *uri),
-                ("(O&O&)", STRING_CONV_FUNC,prefix, STRING_CONV_FUNC,uri ))
+                ("(O&O&)", STRING_CONV_FUNC,prefix, STRING_CONV_FUNC,uri))
 
-VOID_HANDLER( EndNamespaceDecl,
+VOID_HANDLER(EndNamespaceDecl,
                (void *userData,
                    const XML_Char *prefix),
-                ("(O&)", STRING_CONV_FUNC,prefix ))
+                ("(O&)", STRING_CONV_FUNC,prefix))
 
-VOID_HANDLER( Comment,
+VOID_HANDLER(Comment,
                (void *userData, const XML_Char *prefix),
                 ("(O&)", STRING_CONV_FUNC,prefix))
 
-VOID_HANDLER( StartCdataSection,
+VOID_HANDLER(StartCdataSection,
                (void *userData),
-               ("()" ))
+               ("()"))
                
-VOID_HANDLER( EndCdataSection,
+VOID_HANDLER(EndCdataSection,
                (void *userData),
-               ("()" ))
+               ("()"))
 
 #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6
-VOID_HANDLER( Default,
+VOID_HANDLER(Default,
              (void *userData,  const XML_Char *s, int len),
-             ("(O)", conv_string_len_to_utf8(s,len) ) )
+             ("(O)", conv_string_len_to_utf8(s,len)))
 
-VOID_HANDLER( DefaultHandlerExpand,
+VOID_HANDLER(DefaultHandlerExpand,
              (void *userData,  const XML_Char *s, int len),
-             ("(O)", conv_string_len_to_utf8(s,len) ) )
+             ("(O)", conv_string_len_to_utf8(s,len)))
 #else
-VOID_HANDLER( Default,
+VOID_HANDLER(Default,
              (void *userData,  const XML_Char *s, int len),
              ("(O)", (self->returns_unicode 
                       ? conv_string_len_to_unicode(s,len) 
-                      : conv_string_len_to_utf8(s,len) ) ) )
+                      : conv_string_len_to_utf8(s,len))))
 
-VOID_HANDLER( DefaultHandlerExpand,
+VOID_HANDLER(DefaultHandlerExpand,
              (void *userData,  const XML_Char *s, int len),
              ("(O)", (self->returns_unicode 
                       ? conv_string_len_to_unicode(s,len) 
-                      : conv_string_len_to_utf8(s,len) ) ) )
+                      : conv_string_len_to_utf8(s,len))))
 #endif
 
-INT_HANDLER( NotStandalone, 
+INT_HANDLER(NotStandalone, 
                (void *userData), 
                ("()"))
 
-RC_HANDLER( int, ExternalEntityRef,
+RC_HANDLER(int, ExternalEntityRef,
                (XML_Parser parser,
                    const XML_Char *context,
                    const XML_Char *base,
@@ -372,9 +380,9 @@ RC_HANDLER( int, ExternalEntityRef,
                int rc=0;,
                 ("(O&O&O&O&)", 
                 STRING_CONV_FUNC,context, STRING_CONV_FUNC,base, 
-                STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId ),
-               rc = PyInt_AsLong( rv );, rc,
-               XML_GetUserData( parser ) )
+                STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId),
+               rc = PyInt_AsLong(rv);, rc,
+               XML_GetUserData(parser))
                
 
 
@@ -477,7 +485,7 @@ readinst(char *buf, int buf_size, PyObject *meth)
         goto finally;
 
     /* XXX what to do if it returns a Unicode string? */
-    UNLESS(PyString_Check( str )) {
+    UNLESS(PyString_Check(str)) {
         PyErr_Format(PyExc_TypeError, 
                      "read() did not return a string object (type=%.400s)",
                      str->ob_type->tp_name);
@@ -718,7 +726,8 @@ xmlparse_getattr(xmlparseobject *self, char *name)
     return Py_FindMethod(xmlparse_methods, (PyObject *)self, name);
 }
 
-static int sethandler(xmlparseobject *self, const char *name, PyObject* v)
+static int
+sethandler(xmlparseobject *self, const char *name, PyObject* v)
 {
     int handlernum = handlername2int(name);
     if (handlernum != -1) {
@@ -733,36 +742,35 @@ static int sethandler(xmlparseobject *self, const char *name, PyObject* v)
 }
 
 static int
-xmlparse_setattr( xmlparseobject *self, char *name, PyObject *v)
+xmlparse_setattr(xmlparseobject *self, char *name, PyObject *v)
 {
-       /* Set attribute 'name' to value 'v'. v==NULL means delete */
-       if (v==NULL) {
-               PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute");
-               return -1;
-       }
-
-        if (strcmp(name, "returns_unicode") == 0) {
-               PyObject *intobj = PyNumber_Int(v);
-               if (intobj == NULL) return -1;
-               if (PyInt_AsLong(intobj)) {
+    /* Set attribute 'name' to value 'v'. v==NULL means delete */
+    if (v==NULL) {
+        PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute");
+        return -1;
+    }
+    if (strcmp(name, "returns_unicode") == 0) {
+        PyObject *intobj = PyNumber_Int(v);
+        if (intobj == NULL) return -1;
+        if (PyInt_AsLong(intobj)) {
 #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6
-                 PyErr_SetString(PyExc_ValueError, 
-                        "Cannot return Unicode strings in Python 1.5");
-                 return -1;
+            PyErr_SetString(PyExc_ValueError, 
+                            "Cannot return Unicode strings in Python 1.5");
+            return -1;
 #else
-                 self->returns_unicode = 1;
+            self->returns_unicode = 1;
 #endif
-               }
-               else                      self->returns_unicode = 0;
-               Py_DECREF(intobj);
-               return 0;
-       }
-       if( sethandler( self, name, v ) ){
-               return 0;
-       }
-
-       PyErr_SetString( PyExc_AttributeError, name );
-       return -1;
+        }
+        else
+            self->returns_unicode = 0;
+        Py_DECREF(intobj);
+        return 0;
+    }
+    if (sethandler(self, name, v)) {
+        return 0;
+    }
+    PyErr_SetString(PyExc_AttributeError, name);
+    return -1;
 }
 
 static char Xmlparsetype__doc__[] = 
@@ -846,14 +854,20 @@ static char pyexpat_module_documentation[] =
 
 /* Initialization function for the module */
 
-void
+DL_IMPORT(void) initpyexpat(void);
+
+DL_EXPORT(void)
 initpyexpat(void)
 {
     PyObject *m, *d;
     char *rev = "$Revision$";
+    PyObject *errmod_name = PyString_FromString("pyexpat.errors");
     PyObject *errors_module, *errors_dict;
     PyObject *sys_modules;
 
+    if (errmod_name == NULL)
+        return;
+
     Xmlparsetype.ob_type = &PyType_Type;
 
     /* Create the module and add the functions */
@@ -878,25 +892,20 @@ initpyexpat(void)
     PyDict_SetItemString(d, "native_encoding", 
                          PyString_FromString("UTF-8"));
 
-    sys_modules = PySys_GetObject("modules");
-    {
-        PyObject *errmod_name = PyString_FromString("pyexpat.errors");
-
-        if (errmod_name != NULL) {
-            errors_module = PyDict_GetItem(d, errmod_name);
-            if (errors_module == NULL) {
-                errors_module = PyModule_New("pyexpat.errors");
-                if (errors_module != NULL) {
-                    PyDict_SetItemString(d, "errors", errors_module);
-                    PyDict_SetItem(sys_modules, errmod_name, errors_module);
-                }
-            }
-            Py_DECREF(errmod_name);
-            if (errors_module == NULL)
-                /* Don't code dump later! */
-                return;
+    errors_module = PyDict_GetItem(d, errmod_name);
+    if (errors_module == NULL) {
+        errors_module = PyModule_New("pyexpat.errors");
+        if (errors_module != NULL) {
+            sys_modules = PySys_GetObject("modules");
+            PyDict_SetItemString(d, "errors", errors_module);
+            PyDict_SetItem(sys_modules, errmod_name, errors_module);
         }
     }
+    Py_DECREF(errmod_name);
+    if (errors_module == NULL)
+        /* Don't code dump later! */
+        return;
+
     errors_dict = PyModule_GetDict(errors_module);
 
 #define MYCONST(name) \
@@ -924,22 +933,24 @@ initpyexpat(void)
     MYCONST(XML_ERROR_INCORRECT_ENCODING);
 }
 
-void clear_handlers(xmlparseobject *self)
+static void
+clear_handlers(xmlparseobject *self)
 {
     int i = 0;
 
     for (; handler_info[i].name!=NULL; i++) {
         self->handlers[i]=NULL;
-        handler_info[i].setter( self->itself, NULL );
+        handler_info[i].setter(self->itself, NULL);
     }
 }
 
-typedef void (*pairsetter)( XML_Parser, void *handler1, void *handler2 );
+typedef void (*pairsetter)(XML_Parser, void *handler1, void *handler2);
 
-void pyxml_UpdatePairedHandlers(xmlparseobject *self, 
-                               int startHandler, 
-                               int endHandler,
-                               pairsetter setter)
+static void
+pyxml_UpdatePairedHandlers(xmlparseobject *self, 
+                           int startHandler, 
+                           int endHandler,
+                           pairsetter setter)
 {
     void *start_handler=NULL;
     void *end_handler=NULL;
@@ -955,42 +966,48 @@ void pyxml_UpdatePairedHandlers(xmlparseobject *self,
     setter(self->itself, start_handler, end_handler);
 }
 
-void pyxml_SetStartElementHandler(XML_Parser *parser, void *junk)
+static void
+pyxml_SetStartElementHandler(XML_Parser *parser, void *junk)
 {
     pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser),
                                StartElement, EndElement,
                                (pairsetter)XML_SetElementHandler);
 }
 
-void pyxml_SetEndElementHandler(XML_Parser *parser, void *junk)
+static void
+pyxml_SetEndElementHandler(XML_Parser *parser, void *junk)
 {
     pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), 
                                StartElement, EndElement,
                                (pairsetter)XML_SetElementHandler);
 }
 
-void pyxml_SetStartNamespaceDeclHandler(XML_Parser *parser, void *junk)
+static void
+pyxml_SetStartNamespaceDeclHandler(XML_Parser *parser, void *junk)
 {
     pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), 
                                StartNamespaceDecl, EndNamespaceDecl,
                                (pairsetter)XML_SetNamespaceDeclHandler);
 }
 
-void pyxml_SetEndNamespaceDeclHandler(XML_Parser *parser, void *junk)
+static void
+pyxml_SetEndNamespaceDeclHandler(XML_Parser *parser, void *junk)
 {
     pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), 
                                StartNamespaceDecl, EndNamespaceDecl,
                                (pairsetter)XML_SetNamespaceDeclHandler);
 }
 
-void pyxml_SetStartCdataSection(XML_Parser *parser, void *junk)
+static void
+pyxml_SetStartCdataSection(XML_Parser *parser, void *junk)
 {
     pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser),
                                StartCdataSection, EndCdataSection,
                                (pairsetter)XML_SetCdataSectionHandler);
 }
 
-void pyxml_SetEndCdataSection(XML_Parser *parser, void *junk)
+static void
+pyxml_SetEndCdataSection(XML_Parser *parser, void *junk)
 {
     pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), 
                                StartCdataSection, EndCdataSection,