mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-90241: Clarify documentation for PyUnicode_FSConverter and PyUnicode_FSDecoder (GH-128451)
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
		
							parent
							
								
									1ef6bf4e29
								
							
						
					
					
						commit
						657d7b77e5
					
				
					 2 changed files with 36 additions and 11 deletions
				
			
		|  | @ -319,7 +319,7 @@ Other objects | ||||||
| 
 | 
 | ||||||
| .. _o_ampersand: | .. _o_ampersand: | ||||||
| 
 | 
 | ||||||
| ``O&`` (object) [*converter*, *anything*] | ``O&`` (object) [*converter*, *address*] | ||||||
|    Convert a Python object to a C variable through a *converter* function.  This |    Convert a Python object to a C variable through a *converter* function.  This | ||||||
|    takes two arguments: the first is a function, the second is the address of a C |    takes two arguments: the first is a function, the second is the address of a C | ||||||
|    variable (of arbitrary type), converted to :c:expr:`void *`.  The *converter* |    variable (of arbitrary type), converted to :c:expr:`void *`.  The *converter* | ||||||
|  | @ -333,14 +333,20 @@ Other objects | ||||||
|    the conversion has failed.  When the conversion fails, the *converter* function |    the conversion has failed.  When the conversion fails, the *converter* function | ||||||
|    should raise an exception and leave the content of *address* unmodified. |    should raise an exception and leave the content of *address* unmodified. | ||||||
| 
 | 
 | ||||||
|    If the *converter* returns ``Py_CLEANUP_SUPPORTED``, it may get called a |    .. c:macro:: Py_CLEANUP_SUPPORTED | ||||||
|  |       :no-typesetting: | ||||||
|  | 
 | ||||||
|  |    If the *converter* returns :c:macro:`!Py_CLEANUP_SUPPORTED`, it may get called a | ||||||
|    second time if the argument parsing eventually fails, giving the converter a |    second time if the argument parsing eventually fails, giving the converter a | ||||||
|    chance to release any memory that it had already allocated. In this second |    chance to release any memory that it had already allocated. In this second | ||||||
|    call, the *object* parameter will be ``NULL``; *address* will have the same value |    call, the *object* parameter will be ``NULL``; *address* will have the same value | ||||||
|    as in the original call. |    as in the original call. | ||||||
| 
 | 
 | ||||||
|  |    Examples of converters: :c:func:`PyUnicode_FSConverter` and | ||||||
|  |    :c:func:`PyUnicode_FSDecoder`. | ||||||
|  | 
 | ||||||
|    .. versionchanged:: 3.1 |    .. versionchanged:: 3.1 | ||||||
|       ``Py_CLEANUP_SUPPORTED`` was added. |       :c:macro:`!Py_CLEANUP_SUPPORTED` was added. | ||||||
| 
 | 
 | ||||||
| ``p`` (:class:`bool`) [int] | ``p`` (:class:`bool`) [int] | ||||||
|    Tests the value passed in for truth (a boolean **p**\ redicate) and converts |    Tests the value passed in for truth (a boolean **p**\ redicate) and converts | ||||||
|  |  | ||||||
|  | @ -786,16 +786,25 @@ Functions encoding to and decoding from the :term:`filesystem encoding and | ||||||
| error handler` (:pep:`383` and :pep:`529`). | error handler` (:pep:`383` and :pep:`529`). | ||||||
| 
 | 
 | ||||||
| To encode file names to :class:`bytes` during argument parsing, the ``"O&"`` | To encode file names to :class:`bytes` during argument parsing, the ``"O&"`` | ||||||
| converter should be used, passing :c:func:`PyUnicode_FSConverter` as the | converter should be used, passing :c:func:`!PyUnicode_FSConverter` as the | ||||||
| conversion function: | conversion function: | ||||||
| 
 | 
 | ||||||
| .. c:function:: int PyUnicode_FSConverter(PyObject* obj, void* result) | .. c:function:: int PyUnicode_FSConverter(PyObject* obj, void* result) | ||||||
| 
 | 
 | ||||||
|    ParseTuple converter: encode :class:`str` objects -- obtained directly or |    :ref:`PyArg_Parse\* converter <arg-parsing>`: encode :class:`str` objects -- obtained directly or | ||||||
|    through the :class:`os.PathLike` interface -- to :class:`bytes` using |    through the :class:`os.PathLike` interface -- to :class:`bytes` using | ||||||
|    :c:func:`PyUnicode_EncodeFSDefault`; :class:`bytes` objects are output as-is. |    :c:func:`PyUnicode_EncodeFSDefault`; :class:`bytes` objects are output as-is. | ||||||
|    *result* must be a :c:expr:`PyBytesObject*` which must be released when it is |    *result* must be an address of a C variable of type :c:expr:`PyObject*` | ||||||
|    no longer used. |    (or :c:expr:`PyBytesObject*`). | ||||||
|  |    On success, set the variable to a new :term:`strong reference` to | ||||||
|  |    a :ref:`bytes object <bytesobjects>` which must be released | ||||||
|  |    when it is no longer used and return a non-zero value | ||||||
|  |    (:c:macro:`Py_CLEANUP_SUPPORTED`). | ||||||
|  |    Embedded null bytes are not allowed in the result. | ||||||
|  |    On failure, return ``0`` with an exception set. | ||||||
|  | 
 | ||||||
|  |    If *obj* is ``NULL``, the function releases a strong reference | ||||||
|  |    stored in the variable referred by *result* and returns ``1``. | ||||||
| 
 | 
 | ||||||
|    .. versionadded:: 3.1 |    .. versionadded:: 3.1 | ||||||
| 
 | 
 | ||||||
|  | @ -803,16 +812,26 @@ conversion function: | ||||||
|       Accepts a :term:`path-like object`. |       Accepts a :term:`path-like object`. | ||||||
| 
 | 
 | ||||||
| To decode file names to :class:`str` during argument parsing, the ``"O&"`` | To decode file names to :class:`str` during argument parsing, the ``"O&"`` | ||||||
| converter should be used, passing :c:func:`PyUnicode_FSDecoder` as the | converter should be used, passing :c:func:`!PyUnicode_FSDecoder` as the | ||||||
| conversion function: | conversion function: | ||||||
| 
 | 
 | ||||||
| .. c:function:: int PyUnicode_FSDecoder(PyObject* obj, void* result) | .. c:function:: int PyUnicode_FSDecoder(PyObject* obj, void* result) | ||||||
| 
 | 
 | ||||||
|    ParseTuple converter: decode :class:`bytes` objects -- obtained either |    :ref:`PyArg_Parse\* converter <arg-parsing>`: decode :class:`bytes` objects -- obtained either | ||||||
|    directly or indirectly through the :class:`os.PathLike` interface -- to |    directly or indirectly through the :class:`os.PathLike` interface -- to | ||||||
|    :class:`str` using :c:func:`PyUnicode_DecodeFSDefaultAndSize`; :class:`str` |    :class:`str` using :c:func:`PyUnicode_DecodeFSDefaultAndSize`; :class:`str` | ||||||
|    objects are output as-is. *result* must be a :c:expr:`PyUnicodeObject*` which |    objects are output as-is. | ||||||
|    must be released when it is no longer used. |    *result* must be an address of a C variable of type :c:expr:`PyObject*` | ||||||
|  |    (or :c:expr:`PyUnicodeObject*`). | ||||||
|  |    On success, set the variable to a new :term:`strong reference` to | ||||||
|  |    a :ref:`Unicode object <unicodeobjects>` which must be released | ||||||
|  |    when it is no longer used and return a non-zero value | ||||||
|  |    (:c:macro:`Py_CLEANUP_SUPPORTED`). | ||||||
|  |    Embedded null characters are not allowed in the result. | ||||||
|  |    On failure, return ``0`` with an exception set. | ||||||
|  | 
 | ||||||
|  |    If *obj* is ``NULL``, release the strong reference | ||||||
|  |    to the object referred to by *result* and return ``1``. | ||||||
| 
 | 
 | ||||||
|    .. versionadded:: 3.2 |    .. versionadded:: 3.2 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka