/opt/alt/python39/include/python3.9
NameSizeModeActions
cpython/-0755rm
internal/-0755rm
abstract.h304760644editdlrm
asdl.h12240644editdlrm
ast.h9470644editdlrm
bitset.h4680644editdlrm
bltinmodule.h2640644editdlrm
boolobject.h8850644editdlrm
bytearrayobject.h14840644editdlrm
bytesobject.h30480644editdlrm
cellobject.h7120644editdlrm
ceval.h59540644editdlrm
classobject.h16570644editdlrm
code.h3180644editdlrm
codecs.h67930644editdlrm
compile.h37780644editdlrm
complexobject.h18060644editdlrm
context.h19620644editdlrm
datetime.h92550644editdlrm
descrobject.h30190644editdlrm
dictobject.h37150644editdlrm
dynamic_annotations.h224690644editdlrm
enumobject.h2530644editdlrm
errcode.h16240644editdlrm
eval.h12090644editdlrm
exports.h10980644editdlrm
fileobject.h15710644editdlrm
fileutils.h5970644editdlrm
floatobject.h43600644editdlrm
frameobject.h3370644editdlrm
funcobject.h40570644editdlrm
genericaliasobject.h3340644editdlrm
genobject.h35250644editdlrm
graminit.h21180644editdlrm
grammar.h18210644editdlrm
import.h30260644editdlrm
interpreteridobject.h3340644editdlrm
intrcheck.h8610644editdlrm
iterobject.h5210644editdlrm
listobject.h17810644editdlrm
longintrepr.h37990644editdlrm
longobject.h95130644editdlrm
marshal.h8030644editdlrm
memoryobject.h27640644editdlrm
methodobject.h37750644editdlrm
modsupport.h99590644editdlrm
moduleobject.h23610644editdlrm
namespaceobject.h3490644editdlrm
node.h12810644editdlrm
object.h246280644editdlrm
objimpl.h84230644editdlrm
odictobject.h12990644editdlrm
opcode.h49000644editdlrm
osdefs.h7370644editdlrm
osmodule.h2910644editdlrm
parsetok.h29580644editdlrm
patchlevel.h12990644editdlrm
picklebufobject.h8460644editdlrm
pyarena.h27440644editdlrm
pycapsule.h17250644editdlrm
pyconfig-64.h480740644editdlrm
pyconfig.h1620644editdlrm
pyctype.h13870644editdlrm
pydebug.h10930644editdlrm
pydtrace.h24130644editdlrm
pyerrors.h124270644editdlrm
pyexpat.h25720644editdlrm
pyfpe.h4440644editdlrm
pyframe.h4660644editdlrm
pyhash.h42630644editdlrm
pylifecycle.h21360644editdlrm
pymacconfig.h29890644editdlrm
pymacro.h49200644editdlrm
pymath.h85800644editdlrm
pymem.h44060644editdlrm
pyport.h312730644editdlrm
pystate.h52500644editdlrm
pystrcmp.h4360644editdlrm
pystrhex.h8490644editdlrm
pystrtod.h14830644editdlrm
Python-ast.h261930644editdlrm
Python.h35320644editdlrm
pythonrun.h76730644editdlrm
pythread.h59380644editdlrm
pytime.h89280644editdlrm
py_curses.h24740644editdlrm
rangeobject.h6280644editdlrm
setobject.h33240644editdlrm
sliceobject.h25160644editdlrm
structmember.h20300644editdlrm
structseq.h13900644editdlrm
symtable.h53070644editdlrm
sysmodule.h12420644editdlrm
token.h26420644editdlrm
traceback.h5840644editdlrm
tracemalloc.h11140644editdlrm
tupleobject.h16140644editdlrm
typeslots.h23500644editdlrm
ucnhash.h10560644editdlrm
unicodeobject.h354260644editdlrm
warnings.h17760644editdlrm
weakrefobject.h28630644editdlrm
Edit: /opt/alt/python39/include/python3.9/pymem.h (4406B)
/* The PyMem_ family: low-level memory allocation interfaces. See objimpl.h for the PyObject_ memory family. */ #ifndef Py_PYMEM_H #define Py_PYMEM_H #include "pyport.h" #ifdef __cplusplus extern "C" { #endif /* BEWARE: Each interface exports both functions and macros. Extension modules should use the functions, to ensure binary compatibility across Python versions. Because the Python implementation is free to change internal details, and the macros may (or may not) expose details for speed, if you do use the macros you must recompile your extensions with each Python release. Never mix calls to PyMem_ with calls to the platform malloc/realloc/ calloc/free. For example, on Windows different DLLs may end up using different heaps, and if you use PyMem_Malloc you'll get the memory from the heap used by the Python DLL; it could be a disaster if you free()'ed that directly in your own extension. Using PyMem_Free instead ensures Python can return the memory to the proper heap. As another example, in PYMALLOC_DEBUG mode, Python wraps all calls to all PyMem_ and PyObject_ memory functions in special debugging wrappers that add additional debugging info to dynamic memory blocks. The system routines have no idea what to do with that stuff, and the Python wrappers have no idea what to do with raw blocks obtained directly by the system routines then. The GIL must be held when using these APIs. */ /* * Raw memory interface * ==================== */ /* Functions Functions supplying platform-independent semantics for malloc/realloc/ free. These functions make sure that allocating 0 bytes returns a distinct non-NULL pointer (whenever possible -- if we're flat out of memory, NULL may be returned), even if the platform malloc and realloc don't. Returned pointers must be checked for NULL explicitly. No action is performed on failure (no exception is set, no warning is printed, etc). */ PyAPI_FUNC(void *) PyMem_Malloc(size_t size); PyAPI_FUNC(void *) PyMem_Realloc(void *ptr, size_t new_size); PyAPI_FUNC(void) PyMem_Free(void *ptr); /* Macros. */ /* PyMem_MALLOC(0) means malloc(1). Some systems would return NULL for malloc(0), which would be treated as an error. Some platforms would return a pointer with no memory behind it, which would break pymalloc. To solve these problems, allocate an extra byte. */ /* Returns NULL to indicate error if a negative size or size larger than Py_ssize_t can represent is supplied. Helps prevents security holes. */ #define PyMem_MALLOC(n) PyMem_Malloc(n) #define PyMem_REALLOC(p, n) PyMem_Realloc(p, n) #define PyMem_FREE(p) PyMem_Free(p) /* * Type-oriented memory interface * ============================== * * Allocate memory for n objects of the given type. Returns a new pointer * or NULL if the request was too large or memory allocation failed. Use * these macros rather than doing the multiplication yourself so that proper * overflow checking is always done. */ #define PyMem_New(type, n) \ ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ ( (type *) PyMem_Malloc((n) * sizeof(type)) ) ) #define PyMem_NEW(type, n) \ ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ ( (type *) PyMem_MALLOC((n) * sizeof(type)) ) ) /* * The value of (p) is always clobbered by this macro regardless of success. * The caller MUST check if (p) is NULL afterwards and deal with the memory * error if so. This means the original value of (p) MUST be saved for the * caller's memory error handler to not lose track of it. */ #define PyMem_Resize(p, type, n) \ ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) #define PyMem_RESIZE(p, type, n) \ ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ (type *) PyMem_REALLOC((p), (n) * sizeof(type)) ) /* PyMem{Del,DEL} are left over from ancient days, and shouldn't be used * anymore. They're just confusing aliases for PyMem_{Free,FREE} now. */ #define PyMem_Del PyMem_Free #define PyMem_DEL PyMem_FREE #ifndef Py_LIMITED_API # define Py_CPYTHON_PYMEM_H # include "cpython/pymem.h" # undef Py_CPYTHON_PYMEM_H #endif #ifdef __cplusplus } #endif #endif /* !Py_PYMEM_H */