]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Remove private _PyCodec_Lookup() function (#106269)
authorVictor Stinner <vstinner@python.org>
Fri, 30 Jun 2023 09:34:01 +0000 (11:34 +0200)
committerGitHub <noreply@github.com>
Fri, 30 Jun 2023 09:34:01 +0000 (09:34 +0000)
Remove the following private functions of the C API:

* _PyCodecInfo_GetIncrementalDecoder()
* _PyCodecInfo_GetIncrementalEncoder()
* _PyCodec_DecodeText()
* _PyCodec_EncodeText()
* _PyCodec_Forget()
* _PyCodec_Lookup()
* _PyCodec_LookupTextEncoding()

Move these functions to a new pycore_codecs.h internal header file.

These functions are no longer exported.

Include/codecs.h
Include/internal/pycore_codecs.h [new file with mode: 0644]
Makefile.pre.in
Modules/_codecsmodule.c
Modules/_io/textio.c
Objects/unicodeobject.c
PCbuild/pythoncore.vcxproj
PCbuild/pythoncore.vcxproj.filters
Python/pylifecycle.c

index 37ecfb4ab757b416a70873220832905238116846..512a3c723eca18344cca0b44fcf278fc79b364ac 100644 (file)
@@ -35,34 +35,6 @@ PyAPI_FUNC(int) PyCodec_Unregister(
        PyObject *search_function
        );
 
-/* Codec registry lookup API.
-
-   Looks up the given encoding and returns a CodecInfo object with
-   function attributes which implement the different aspects of
-   processing the encoding.
-
-   The encoding string is looked up converted to all lower-case
-   characters. This makes encodings looked up through this mechanism
-   effectively case-insensitive.
-
-   If no codec is found, a KeyError is set and NULL returned.
-
-   As side effect, this tries to load the encodings package, if not
-   yet done. This is part of the lazy load strategy for the encodings
-   package.
-
- */
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
-       const char *encoding
-       );
-
-PyAPI_FUNC(int) _PyCodec_Forget(
-       const char *encoding
-       );
-#endif
-
 /* Codec registry encoding check API.
 
    Returns 1/0 depending on whether there is a registered codec for
@@ -106,102 +78,58 @@ PyAPI_FUNC(PyObject *) PyCodec_Decode(
        const char *errors
        );
 
-#ifndef Py_LIMITED_API
-/* Text codec specific encoding and decoding API.
-
-   Checks the encoding against a list of codecs which do not
-   implement a str<->bytes encoding before attempting the
-   operation.
+// --- Codec Lookup APIs --------------------------------------------------
 
-   Please note that these APIs are internal and should not
-   be used in Python C extensions.
-
-   XXX (ncoghlan): should we make these, or something like them, public
-   in Python 3.5+?
+/* Codec registry lookup API.
 
- */
-PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding(
-       const char *encoding,
-       const char *alternate_command
-       );
+   Looks up the given encoding and returns a CodecInfo object with
+   function attributes which implement the different aspects of
+   processing the encoding.
 
-PyAPI_FUNC(PyObject *) _PyCodec_EncodeText(
-       PyObject *object,
-       const char *encoding,
-       const char *errors
-       );
+   The encoding string is looked up converted to all lower-case
+   characters. This makes encodings looked up through this mechanism
+   effectively case-insensitive.
 
-PyAPI_FUNC(PyObject *) _PyCodec_DecodeText(
-       PyObject *object,
-       const char *encoding,
-       const char *errors
-       );
+   If no codec is found, a KeyError is set and NULL returned.
 
-/* These two aren't actually text encoding specific, but _io.TextIOWrapper
- * is the only current API consumer.
+   As side effect, this tries to load the encodings package, if not
+   yet done. This is part of the lazy load strategy for the encodings
+   package.
  */
-PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder(
-       PyObject *codec_info,
-       const char *errors
-       );
-
-PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder(
-       PyObject *codec_info,
-       const char *errors
-       );
-#endif
-
-
-
-/* --- Codec Lookup APIs --------------------------------------------------
-
-   All APIs return a codec object with incremented refcount and are
-   based on _PyCodec_Lookup().  The same comments w/r to the encoding
-   name also apply to these APIs.
-
-*/
 
 /* Get an encoder function for the given encoding. */
 
-PyAPI_FUNC(PyObject *) PyCodec_Encoder(
-       const char *encoding
-       );
+PyAPI_FUNC(PyObject *) PyCodec_Encoder(const char *encoding);
 
 /* Get a decoder function for the given encoding. */
 
-PyAPI_FUNC(PyObject *) PyCodec_Decoder(
-       const char *encoding
-       );
+PyAPI_FUNC(PyObject *) PyCodec_Decoder(const char *encoding);
 
 /* Get an IncrementalEncoder object for the given encoding. */
 
 PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder(
-       const char *encoding,
-       const char *errors
-       );
+   const char *encoding,
+   const char *errors);
 
 /* Get an IncrementalDecoder object function for the given encoding. */
 
 PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder(
-       const char *encoding,
-       const char *errors
-       );
+   const char *encoding,
+   const char *errors);
 
 /* Get a StreamReader factory function for the given encoding. */
 
 PyAPI_FUNC(PyObject *) PyCodec_StreamReader(
-       const char *encoding,
-       PyObject *stream,
-       const char *errors
-       );
+   const char *encoding,
+   PyObject *stream,
+   const char *errors);
 
 /* Get a StreamWriter factory function for the given encoding. */
 
 PyAPI_FUNC(PyObject *) PyCodec_StreamWriter(
-       const char *encoding,
-       PyObject *stream,
-       const char *errors
-       );
+   const char *encoding,
+   PyObject *stream,
+   const char *errors);
 
 /* Unicode encoding error handling callback registry API */
 
diff --git a/Include/internal/pycore_codecs.h b/Include/internal/pycore_codecs.h
new file mode 100644 (file)
index 0000000..2f8d9d5
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef Py_INTERNAL_CODECS_H
+#define Py_INTERNAL_CODECS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyObject* _PyCodec_Lookup(const char *encoding);
+
+extern int _PyCodec_Forget(const char *encoding);
+
+/* Text codec specific encoding and decoding API.
+
+   Checks the encoding against a list of codecs which do not
+   implement a str<->bytes encoding before attempting the
+   operation.
+
+   Please note that these APIs are internal and should not
+   be used in Python C extensions.
+
+   XXX (ncoghlan): should we make these, or something like them, public
+   in Python 3.5+?
+
+ */
+extern PyObject* _PyCodec_LookupTextEncoding(
+   const char *encoding,
+   const char *alternate_command);
+
+extern PyObject* _PyCodec_EncodeText(
+   PyObject *object,
+   const char *encoding,
+   const char *errors);
+
+extern PyObject* _PyCodec_DecodeText(
+   PyObject *object,
+   const char *encoding,
+   const char *errors);
+
+/* These two aren't actually text encoding specific, but _io.TextIOWrapper
+ * is the only current API consumer.
+ */
+extern PyObject* _PyCodecInfo_GetIncrementalDecoder(
+   PyObject *codec_info,
+   const char *errors);
+
+extern PyObject* _PyCodecInfo_GetIncrementalEncoder(
+   PyObject *codec_info,
+   const char *errors);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_CODECS_H */
index 98b58cf1299f16e8c740a74265619d497f7c003b..cd66c475665b2e3b40658275ed2e5b1ac3036c14 100644 (file)
@@ -1732,6 +1732,7 @@ PYTHON_HEADERS= \
                $(srcdir)/Include/internal/pycore_ceval.h \
                $(srcdir)/Include/internal/pycore_ceval_state.h \
                $(srcdir)/Include/internal/pycore_code.h \
+               $(srcdir)/Include/internal/pycore_codecs.h \
                $(srcdir)/Include/internal/pycore_compile.h \
                $(srcdir)/Include/internal/pycore_condvar.h \
                $(srcdir)/Include/internal/pycore_context.h \
index 777c753bd7c2a92a10c3e69dfb728923d69c511f..4dfd134f1cb11e413e5a3d02bd5d7b005b15a91b 100644 (file)
@@ -32,6 +32,7 @@ Copyright (c) Corporation for National Research Initiatives.
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
+#include "pycore_codecs.h"        // _PyCodec_Lookup()
 
 #ifdef MS_WINDOWS
 #include <windows.h>
index e6b1306c2f3f0bb83b447da1a86cac6591b98192..c8e6792657cd58175660ac68afa6ec76c488dfb2 100644 (file)
@@ -9,6 +9,7 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "pycore_call.h"          // _PyObject_CallMethod()
+#include "pycore_codecs.h"        // _PyCodecInfo_GetIncrementalDecoder()
 #include "pycore_interp.h"        // PyInterpreterState.fs_codec
 #include "pycore_long.h"          // _PyLong_GetZero()
 #include "pycore_fileutils.h"     // _Py_GetLocaleEncoding()
index 38b72de88f3c0b629d93d4a2b336b4a2cba4d51b..4434bf19d43b701db5e4e9a6c9cfb27db901f82f 100644 (file)
@@ -42,8 +42,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "Python.h"
 #include "pycore_abstract.h"      // _PyIndex_Check()
 #include "pycore_atomic_funcs.h"  // _Py_atomic_size_get()
-#include "pycore_bytesobject.h"   // _PyBytes_Repeat()
 #include "pycore_bytes_methods.h" // _Py_bytes_lower()
+#include "pycore_bytesobject.h"   // _PyBytes_Repeat()
+#include "pycore_codecs.h"        // _PyCodec_Lookup()
 #include "pycore_format.h"        // F_LJUST
 #include "pycore_initconfig.h"    // _PyStatus_OK()
 #include "pycore_interp.h"        // PyInterpreterState.fs_codec
index a68452a916aa3cd87bdda122634d246f739c280d..4ccd2b5edd3f6e6bd147d95c374a5bd8d6548d67 100644 (file)
     <ClInclude Include="..\Include\internal\pycore_ceval_state.h" />
     <ClInclude Include="..\Include\internal\pycore_cfg.h" />
     <ClInclude Include="..\Include\internal\pycore_code.h" />
+    <ClInclude Include="..\Include\internal\pycore_codecs.h" />
     <ClInclude Include="..\Include\internal\pycore_compile.h" />
     <ClInclude Include="..\Include\internal\pycore_condvar.h" />
     <ClInclude Include="..\Include\internal\pycore_context.h" />
index bf9b42f4d790e32f3aee5104f16306beb0217136..99f924856a354d57a5582e8e0253b9cf97f66919 100644 (file)
     <ClInclude Include="..\Include\internal\pycore_code.h">
       <Filter>Include\internal</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_codecs.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_compile.h">
       <Filter>Include\internal</Filter>
     </ClInclude>
index 1df35ef4278677ea26f3448fa4e6cd256f61bddf..cf8b4379c1467fd06b2eef2dcefb552b8e4e454b 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "pycore_call.h"          // _PyObject_CallMethod()
 #include "pycore_ceval.h"         // _PyEval_FiniGIL()
+#include "pycore_codecs.h"        // _PyCodec_Lookup()
 #include "pycore_context.h"       // _PyContext_Init()
 #include "pycore_dict.h"          // _PyDict_Fini()
 #include "pycore_exceptions.h"    // _PyExc_InitTypes()