| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | .. highlightlang:: c
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. _marshalling-utils:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Data marshalling support
 | 
					
						
							|  |  |  | ========================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | These routines allow C code to work with serialized objects using the same data
 | 
					
						
							|  |  |  | format as the :mod:`marshal` module.  There are functions to write data into the
 | 
					
						
							|  |  |  | serialization format, and additional functions that can be used to read the data
 | 
					
						
							|  |  |  | back.  Files used to store marshalled data must be opened in binary mode.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Numeric values are stored with the least significant byte first.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The module supports two versions of the data format: version 0 is the historical
 | 
					
						
							| 
									
										
										
										
											2008-05-12 18:05:20 +00:00
										 |  |  | version, version 1 shares interned strings in the file, and upon unmarshalling.
 | 
					
						
							|  |  |  | Version 2 uses a binary format for floating point numbers.
 | 
					
						
							|  |  |  | *Py_MARSHAL_VERSION* indicates the current file format (currently 2).
 | 
					
						
							| 
									
										
										
										
											2008-01-20 09:30:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: void PyMarshal_WriteLongToFile(long value, FILE *file, int version)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Marshal a :ctype:`long` integer, *value*, to *file*.  This will only write the
 | 
					
						
							|  |  |  |    least-significant 32 bits of *value*; regardless of the size of the native
 | 
					
						
							|  |  |  |    :ctype:`long` type.  *version* indicates the file format.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Marshal a Python object, *value*, to *file*.
 | 
					
						
							|  |  |  |    *version* indicates the file format.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: PyObject* PyMarshal_WriteObjectToString(PyObject *value, int version)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a string object containing the marshalled representation of *value*.
 | 
					
						
							|  |  |  |    *version* indicates the file format.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The following functions allow marshalled values to be read back in.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XXX What about error detection?  It appears that reading past the end of the
 | 
					
						
							|  |  |  | file will always result in a negative numeric value (where that's relevant), but
 | 
					
						
							|  |  |  | it's not clear that negative values won't be handled properly when there's no
 | 
					
						
							|  |  |  | error.  What's the right way to tell? Should only non-negative values be written
 | 
					
						
							|  |  |  | using these routines?
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: long PyMarshal_ReadLongFromFile(FILE *file)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a C :ctype:`long` from the data stream in a :ctype:`FILE\*` opened for
 | 
					
						
							|  |  |  |    reading.  Only a 32-bit value can be read in using this function, regardless of
 | 
					
						
							|  |  |  |    the native size of :ctype:`long`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: int PyMarshal_ReadShortFromFile(FILE *file)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a C :ctype:`short` from the data stream in a :ctype:`FILE\*` opened for
 | 
					
						
							|  |  |  |    reading.  Only a 16-bit value can be read in using this function, regardless of
 | 
					
						
							|  |  |  |    the native size of :ctype:`short`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: PyObject* PyMarshal_ReadObjectFromFile(FILE *file)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a Python object from the data stream in a :ctype:`FILE\*` opened for
 | 
					
						
							|  |  |  |    reading.  On error, sets the appropriate exception (:exc:`EOFError` or
 | 
					
						
							|  |  |  |    :exc:`TypeError`) and returns *NULL*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a Python object from the data stream in a :ctype:`FILE\*` opened for
 | 
					
						
							|  |  |  |    reading.  Unlike :cfunc:`PyMarshal_ReadObjectFromFile`, this function assumes
 | 
					
						
							|  |  |  |    that no further objects will be read from the file, allowing it to aggressively
 | 
					
						
							|  |  |  |    load file data into memory so that the de-serialization can operate from data in
 | 
					
						
							|  |  |  |    memory rather than reading a byte at a time from the file.  Only use these
 | 
					
						
							|  |  |  |    variant if you are certain that you won't be reading anything else from the
 | 
					
						
							|  |  |  |    file.  On error, sets the appropriate exception (:exc:`EOFError` or
 | 
					
						
							|  |  |  |    :exc:`TypeError`) and returns *NULL*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. cfunction:: PyObject* PyMarshal_ReadObjectFromString(char *string, Py_ssize_t len)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a Python object from the data stream in a character buffer containing
 | 
					
						
							|  |  |  |    *len* bytes pointed to by *string*.  On error, sets the appropriate exception
 | 
					
						
							|  |  |  |    (:exc:`EOFError` or :exc:`TypeError`) and returns *NULL*.
 |