Staging
v0.5.1
https://github.com/python/cpython
Revision 90c25aa2b656c47304c77723be1987cf34b99d36 authored by Jack Jansen on 25 March 2002, 10:45:21 UTC, committed by Jack Jansen on 25 March 2002, 10:45:21 UTC
Weaklink most toolbox modules, improving backward compatibility. Modules will no longer fail to load if a single routine is missing on the curent OS version, in stead calling the missing routine will raise an exception.

Should finally fix 531398. 2.2.1 candidate.

Also blacklisted some constants with definitions that were not Python-compatible.
1 parent 2bfd14e
Raw File
Tip revision: 90c25aa2b656c47304c77723be1987cf34b99d36 authored by Jack Jansen on 25 March 2002, 10:45:21 UTC
Backport of _Icnmodule.c 1.5, icnsupport.py 1.7:
Tip revision: 90c25aa
structmember.h
#ifndef Py_STRUCTMEMBER_H
#define Py_STRUCTMEMBER_H
#ifdef __cplusplus
extern "C" {
#endif


/* Interface to map C struct members to Python object attributes */

#ifdef HAVE_STDDEF_H
#include <stddef.h> /* For offsetof */
#endif

/* The offsetof() macro calculates the offset of a structure member
   in its structure.  Unfortunately this cannot be written down
   portably, hence it is provided by a Standard C header file.
   For pre-Standard C compilers, here is a version that usually works
   (but watch out!): */

#ifndef offsetof
#define offsetof(type, member) ( (int) & ((type*)0) -> member )
#endif

/* An array of memberlist structures defines the name, type and offset
   of selected members of a C structure.  These can be read by
   PyMember_Get() and set by PyMember_Set() (except if their READONLY flag
   is set).  The array must be terminated with an entry whose name
   pointer is NULL. */

struct memberlist {
	/* Obsolete version, for binary backwards compatibility */
	char *name;
	int type;
	int offset;
	int flags;
};

typedef struct PyMemberDef {
	/* Current version, use this */
	char *name;
	int type;
	int offset;
	int flags;
	char *doc;
} PyMemberDef;

/* Types */
#define T_SHORT		0
#define T_INT		1
#define T_LONG		2
#define T_FLOAT		3
#define T_DOUBLE	4
#define T_STRING	5
#define T_OBJECT	6
/* XXX the ordering here is weird for binary compatibility */
#define T_CHAR		7	/* 1-character string */
#define T_BYTE		8	/* 8-bit signed int */
/* unsigned variants: */
#define T_UBYTE		9
#define T_USHORT	10
#define T_UINT		11
#define T_ULONG		12

/* Added by Jack: strings contained in the structure */
#define T_STRING_INPLACE	13
#ifdef macintosh
#define T_PSTRING	14	/* macintosh pascal-style counted string */
#define T_PSTRING_INPLACE	15
#endif /* macintosh */

#define T_OBJECT_EX	16	/* Like T_OBJECT, but raises AttributeError
				   when the value is NULL, instead of
				   converting to None. */

/* Flags */
#define READONLY	1
#define RO		READONLY		/* Shorthand */
#define READ_RESTRICTED	2
#define WRITE_RESTRICTED 4
#define RESTRICTED	(READ_RESTRICTED | WRITE_RESTRICTED)


/* Obsolete API, for binary backwards compatibility */
DL_IMPORT(PyObject *) PyMember_Get(char *, struct memberlist *, char *);
DL_IMPORT(int) PyMember_Set(char *, struct memberlist *, char *, PyObject *);

/* Current API, use this */
DL_IMPORT(PyObject *) PyMember_GetOne(char *, struct PyMemberDef *);
DL_IMPORT(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *);


#ifdef __cplusplus
}
#endif
#endif /* !Py_STRUCTMEMBER_H */
back to top