mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	 0d3ccb4395
			
		
	
	
		0d3ccb4395
		
	
	
	
	
		
			
			Starting with AIX6.1 there is support in libc.a for uuid (RFC4122) This patch provides the changes needed for this integration with the OS. On AIX the base function is uuid_create() rather than uuid_generate_time() The AIX uuid_t typedef is more aligned to the UUID field based definition while the Linux typedef that is more aligned with UUID bytes (or perhaps UUID bytes_le) definitions.
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #define PY_SSIZE_T_CLEAN
 | |
| 
 | |
| #include "Python.h"
 | |
| #ifdef HAVE_UUID_UUID_H
 | |
| #include <uuid/uuid.h>
 | |
| #endif
 | |
| #ifdef HAVE_UUID_H
 | |
| #include <uuid.h>
 | |
| #endif
 | |
| 
 | |
| 
 | |
| static PyObject *
 | |
| py_uuid_generate_time_safe(void)
 | |
| {
 | |
|     uuid_t uuid;
 | |
| #ifdef HAVE_UUID_GENERATE_TIME_SAFE
 | |
|     int res;
 | |
| 
 | |
|     res = uuid_generate_time_safe(uuid);
 | |
|     return Py_BuildValue("y#i", (const char *) uuid, sizeof(uuid), res);
 | |
| #elif HAVE_UUID_CREATE
 | |
| /*
 | |
|  * AIX support for uuid - RFC4122
 | |
|  */
 | |
|     unsigned32 status;
 | |
|     uuid_create(&uuid, &status);
 | |
|     return Py_BuildValue("y#i", (const char *) &uuid, sizeof(uuid), (int) status);
 | |
| #else
 | |
|     uuid_generate_time(uuid);
 | |
|     return Py_BuildValue("y#O", (const char *) uuid, sizeof(uuid), Py_None);
 | |
| #endif
 | |
| }
 | |
| 
 | |
| 
 | |
| static PyMethodDef uuid_methods[] = {
 | |
|     {"generate_time_safe", (PyCFunction) py_uuid_generate_time_safe, METH_NOARGS, NULL},
 | |
|     {NULL, NULL, 0, NULL}           /* sentinel */
 | |
| };
 | |
| 
 | |
| static struct PyModuleDef uuidmodule = {
 | |
|     PyModuleDef_HEAD_INIT,
 | |
|     .m_name = "_uuid",
 | |
|     .m_size = -1,
 | |
|     .m_methods = uuid_methods,
 | |
| };
 | |
| 
 | |
| PyMODINIT_FUNC
 | |
| PyInit__uuid(void)
 | |
| {
 | |
|     PyObject *mod;
 | |
|     assert(sizeof(uuid_t) == 16);
 | |
| #ifdef HAVE_UUID_GENERATE_TIME_SAFE
 | |
|     int has_uuid_generate_time_safe = 1;
 | |
| #else
 | |
|     int has_uuid_generate_time_safe = 0;
 | |
| #endif
 | |
|     mod = PyModule_Create(&uuidmodule);
 | |
|     if (mod == NULL) {
 | |
|         return NULL;
 | |
|     }
 | |
|     if (PyModule_AddIntConstant(mod, "has_uuid_generate_time_safe",
 | |
|                                 has_uuid_generate_time_safe) < 0) {
 | |
|         return NULL;
 | |
|     }
 | |
| 
 | |
|     return mod;
 | |
| }
 |