mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Complete rewrite.
This commit is contained in:
		
							parent
							
								
									51f4b8dc78
								
							
						
					
					
						commit
						17ba43f1e4
					
				
					 1 changed files with 363 additions and 63 deletions
				
			
		| 
						 | 
				
			
			@ -36,64 +36,365 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		|||
#define FileFilterUPP FileFilterProcPtr
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static object *ErrorObject;
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------- */
 | 
			
		||||
/* Declarations for objects of type Alias */
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	OB_HEAD
 | 
			
		||||
	AliasHandle alias;
 | 
			
		||||
} mfsaobject;
 | 
			
		||||
 | 
			
		||||
staticforward typeobject Mfsatype;
 | 
			
		||||
 | 
			
		||||
#define is_mfsaobject(v)		((v)->ob_type == &Mfsatype)
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
/* Declarations for objects of type FSSpec */
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	OB_HEAD
 | 
			
		||||
	FSSpec fsspec;
 | 
			
		||||
} mfssobject;
 | 
			
		||||
 | 
			
		||||
staticforward typeobject Mfsstype;
 | 
			
		||||
 | 
			
		||||
#define is_mfssobject(v)		((v)->ob_type == &Mfsstype)
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_NewAlias(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
mfsa_Resolve(self, args)
 | 
			
		||||
	mfsaobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	FSSpec src, dst, *dstptr;
 | 
			
		||||
	FSSpec from, *fromp, result;
 | 
			
		||||
	Boolean changed;
 | 
			
		||||
	OSErr err;
 | 
			
		||||
	
 | 
			
		||||
	src.name[0] = 0;
 | 
			
		||||
	if (!newgetargs(args, "O&|O&", PyMac_GetFSSpec, &dst, PyMac_GetFSSpec, &src))
 | 
			
		||||
	from.name[0] = 0;
 | 
			
		||||
	if (!newgetargs(args, "|O&", PyMac_GetFSSpec, &from))
 | 
			
		||||
		return NULL;
 | 
			
		||||
		
 | 
			
		||||
	/* XXXX */
 | 
			
		||||
 | 
			
		||||
	INCREF(None);
 | 
			
		||||
	return None;
 | 
			
		||||
	if (from.name[0] )
 | 
			
		||||
		fromp = &from;
 | 
			
		||||
	else
 | 
			
		||||
		fromp = NULL;
 | 
			
		||||
	err = ResolveAlias(fromp, self->alias, &result, &changed);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return mkvalue("(Oi)", newmfssobject(&result), (int)changed);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_ResolveAlias(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
mfsa_GetInfo(self, args)
 | 
			
		||||
	mfsaobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	Str63 value;
 | 
			
		||||
	int i;
 | 
			
		||||
	OSErr err;
 | 
			
		||||
	
 | 
			
		||||
	if (!newgetargs(args, "i", &i))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	err = GetAliasInfo(self->alias, (AliasInfoType)i, value);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return newsizedstringobject((char *)&value[1], value[0]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfsa_Update(self, args)
 | 
			
		||||
	mfsaobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	FSSpec target, fromfile, *fromfilep;
 | 
			
		||||
	OSErr err;
 | 
			
		||||
	Boolean changed;
 | 
			
		||||
	
 | 
			
		||||
	fromfile.name[0] = 0;
 | 
			
		||||
	if (!newgetargs(args, "O&|O&",  PyMac_GetFSSpec, &target,
 | 
			
		||||
					 PyMac_GetFSSpec, &fromfile))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	if ( fromfile.name[0] )
 | 
			
		||||
		fromfilep = &fromfile;
 | 
			
		||||
	else
 | 
			
		||||
		fromfilep = NULL;
 | 
			
		||||
	err = UpdateAlias(fromfilep, &target, self->alias, &changed);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return mkvalue("i", (int)changed);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct methodlist mfsa_methods[] = {
 | 
			
		||||
	{"Resolve",	mfsa_Resolve,	1},
 | 
			
		||||
	{"GetInfo",	mfsa_GetInfo,	1},
 | 
			
		||||
	{"Update",	mfsa_Update,	1},
 | 
			
		||||
 
 | 
			
		||||
	{NULL,		NULL}		/* sentinel */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ---------- */
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfsa_getattr(self, name)
 | 
			
		||||
	mfsaobject *self;
 | 
			
		||||
	char *name;
 | 
			
		||||
{
 | 
			
		||||
	return findmethod(mfsa_methods, (object *)self, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mfsaobject *
 | 
			
		||||
newmfsaobject(alias)
 | 
			
		||||
	AliasHandle alias;
 | 
			
		||||
{
 | 
			
		||||
	mfsaobject *self;
 | 
			
		||||
 | 
			
		||||
	self = NEWOBJ(mfsaobject, &Mfsatype);
 | 
			
		||||
	if (self == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	self->alias = alias;
 | 
			
		||||
	return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
mfsa_dealloc(self)
 | 
			
		||||
	mfsaobject *self;
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
	if ( self->alias ) {
 | 
			
		||||
		should we do something here?
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
	DEL(self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static typeobject Mfsatype = {
 | 
			
		||||
	OB_HEAD_INIT(&Typetype)
 | 
			
		||||
	0,				/*ob_size*/
 | 
			
		||||
	"Alias",			/*tp_name*/
 | 
			
		||||
	sizeof(mfsaobject),		/*tp_basicsize*/
 | 
			
		||||
	0,				/*tp_itemsize*/
 | 
			
		||||
	/* methods */
 | 
			
		||||
	(destructor)mfsa_dealloc,	/*tp_dealloc*/
 | 
			
		||||
	(printfunc)0,		/*tp_print*/
 | 
			
		||||
	(getattrfunc)mfsa_getattr,	/*tp_getattr*/
 | 
			
		||||
	(setattrfunc)0,	/*tp_setattr*/
 | 
			
		||||
	(cmpfunc)0,		/*tp_compare*/
 | 
			
		||||
	(reprfunc)0,		/*tp_repr*/
 | 
			
		||||
	0,			/*tp_as_number*/
 | 
			
		||||
	0,		/*tp_as_sequence*/
 | 
			
		||||
	0,		/*tp_as_mapping*/
 | 
			
		||||
	(hashfunc)0,		/*tp_hash*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* End of code for Alias objects */
 | 
			
		||||
/* -------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
** Helper routine for other modules: return an FSSpec * if the
 | 
			
		||||
** object is a python fsspec object, else NULL
 | 
			
		||||
*/
 | 
			
		||||
FSSpec *
 | 
			
		||||
mfs_GetFSSpecFSSpec(self)
 | 
			
		||||
	object *self;
 | 
			
		||||
{
 | 
			
		||||
	if ( is_mfssobject(self) )
 | 
			
		||||
		return &((mfssobject *)self)->fsspec;
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfss_as_pathname(self, args)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	char strbuf[257];
 | 
			
		||||
	OSErr err;
 | 
			
		||||
 | 
			
		||||
	if (!newgetargs(args, ""))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	INCREF(None);
 | 
			
		||||
	return None;
 | 
			
		||||
	err = nfullpath(&self->fsspec, strbuf);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return newstringobject(strbuf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfss_as_tuple(self, args)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	if (!newgetargs(args, ""))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return Py_BuildValue("(iis#)", self->fsspec.vRefNum, self->fsspec.parID, 
 | 
			
		||||
						&self->fsspec.name[1], self->fsspec.name[0]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfss_NewAlias(self, args)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	FSSpec src, *srcp;
 | 
			
		||||
	OSErr err;
 | 
			
		||||
	AliasHandle alias;
 | 
			
		||||
	
 | 
			
		||||
	src.name[0] = 0;
 | 
			
		||||
	if (!newgetargs(args, "|O&", PyMac_GetFSSpec, &src))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	if ( src.name[0] )
 | 
			
		||||
		srcp = &src;
 | 
			
		||||
	else
 | 
			
		||||
		srcp = NULL;
 | 
			
		||||
	err = NewAlias(srcp, &self->fsspec, &alias);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return (object *)newmfsaobject(alias);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfss_NewAliasMinimal(self, args)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	OSErr err;
 | 
			
		||||
	AliasHandle alias;
 | 
			
		||||
	
 | 
			
		||||
	if (!newgetargs(args, ""))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	err = NewAliasMinimal(&self->fsspec, &alias);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return (object *)newmfsaobject(alias);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct methodlist mfss_methods[] = {
 | 
			
		||||
	{"as_pathname",		mfss_as_pathname,			1},
 | 
			
		||||
	{"as_tuple",		mfss_as_tuple,				1},
 | 
			
		||||
	{"NewAlias",		mfss_NewAlias,				1},
 | 
			
		||||
	{"NewAliasMinimal",	mfss_NewAliasMinimal,		1},
 | 
			
		||||
 
 | 
			
		||||
	{NULL,			NULL}		/* sentinel */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ---------- */
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfss_getattr(self, name)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
	char *name;
 | 
			
		||||
{
 | 
			
		||||
	return findmethod(mfss_methods, (object *)self, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mfssobject *
 | 
			
		||||
newmfssobject(fss)
 | 
			
		||||
	FSSpec *fss;
 | 
			
		||||
{
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
	
 | 
			
		||||
	self = NEWOBJ(mfssobject, &Mfsstype);
 | 
			
		||||
	if (self == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	self->fsspec = *fss;
 | 
			
		||||
	return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
mfss_dealloc(self)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
{
 | 
			
		||||
	DEL(self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfss_repr(self)
 | 
			
		||||
	mfssobject *self;
 | 
			
		||||
{
 | 
			
		||||
	char buf[512];
 | 
			
		||||
 | 
			
		||||
	/* XXXX Does %#s work for all compilers? */
 | 
			
		||||
	sprintf(buf, "FSSpec((%d, %d, '%#s'))", self->fsspec.vRefNum, 
 | 
			
		||||
				self->fsspec.parID, self->fsspec.name);
 | 
			
		||||
	return newstringobject(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
mfss_compare(v, w)
 | 
			
		||||
	mfssobject *v, *w;
 | 
			
		||||
{
 | 
			
		||||
	int minlen;
 | 
			
		||||
	int res;
 | 
			
		||||
	
 | 
			
		||||
	if ( v->fsspec.vRefNum < w->fsspec.vRefNum ) return -1;
 | 
			
		||||
	if ( v->fsspec.vRefNum > w->fsspec.vRefNum ) return 1;
 | 
			
		||||
	if ( v->fsspec.parID < w->fsspec.parID ) return -1;
 | 
			
		||||
	if ( v->fsspec.parID > w->fsspec.parID ) return 1;
 | 
			
		||||
	minlen = v->fsspec.name[0];
 | 
			
		||||
	if ( w->fsspec.name[0] < minlen ) minlen = w->fsspec.name[0];
 | 
			
		||||
	res = strncmp((char *)v->fsspec.name+1, (char *)w->fsspec.name+1, minlen);
 | 
			
		||||
	if ( res ) return res;
 | 
			
		||||
	if ( v->fsspec.name[0] < w->fsspec.name[0] ) return -1;
 | 
			
		||||
	if ( v->fsspec.name[0] > w->fsspec.name[0] ) return 1;
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static typeobject Mfsstype = {
 | 
			
		||||
	OB_HEAD_INIT(&Typetype)
 | 
			
		||||
	0,				/*ob_size*/
 | 
			
		||||
	"FSSpec",			/*tp_name*/
 | 
			
		||||
	sizeof(mfssobject),		/*tp_basicsize*/
 | 
			
		||||
	0,				/*tp_itemsize*/
 | 
			
		||||
	/* methods */
 | 
			
		||||
	(destructor)mfss_dealloc,	/*tp_dealloc*/
 | 
			
		||||
	(printfunc)0,		/*tp_print*/
 | 
			
		||||
	(getattrfunc)mfss_getattr,	/*tp_getattr*/
 | 
			
		||||
	(setattrfunc)0,	/*tp_setattr*/
 | 
			
		||||
	(cmpfunc)mfss_compare,		/*tp_compare*/
 | 
			
		||||
	(reprfunc)mfss_repr,		/*tp_repr*/
 | 
			
		||||
	0,			/*tp_as_number*/
 | 
			
		||||
	0,		/*tp_as_sequence*/
 | 
			
		||||
	0,		/*tp_as_mapping*/
 | 
			
		||||
	(hashfunc)0,		/*tp_hash*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* End of code for FSSpec objects */
 | 
			
		||||
/* -------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_ResolveAliasFile(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	FSSpec fss;
 | 
			
		||||
	Boolean chain = 1, isfolder, wasaliased;
 | 
			
		||||
	OSErr err;
 | 
			
		||||
 | 
			
		||||
	if (!newgetargs(args, ""))
 | 
			
		||||
	if (!newgetargs(args, "O&|i", PyMac_GetFSSpec, &fss, &chain))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	INCREF(None);
 | 
			
		||||
	return None;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_StandardPutFile(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	Str255 prompt, dft;
 | 
			
		||||
	StandardFileReply reply;
 | 
			
		||||
	
 | 
			
		||||
	dft[0] = 0;
 | 
			
		||||
	if (!newgetargs(args, "O&|O&", PyMac_GetStr255, &prompt, PyMac_GetStr255, &dft) )
 | 
			
		||||
	err = ResolveAliasFile(&fss, chain, &isfolder, &wasaliased);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	StandardPutFile(prompt, dft, &reply);
 | 
			
		||||
	return mkvalue("(iO)", reply.sfGood, PyMac_BuildFSSpec(&reply.sfFile));
 | 
			
		||||
	}
 | 
			
		||||
	return mkvalue("Oii", newmfssobject(&fss), (int)isfolder, (int)wasaliased);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
| 
						 | 
				
			
			@ -108,19 +409,40 @@ mfs_StandardGetFile(self, args)
 | 
			
		|||
	
 | 
			
		||||
	list[0] = list[1] = list[2] = list[3] = 0;
 | 
			
		||||
	numtypes = 0;
 | 
			
		||||
	/* XXXX I don't understand newgetargs, why doesn't |s|s|s|s work? */
 | 
			
		||||
	if (!newgetargs(args, "|s", &list[0] /*, &list[1], &list[2], &list[3]*/) )
 | 
			
		||||
#if 0
 | 
			
		||||
	/* XXXX Why doesn't this work? */
 | 
			
		||||
	if (!newgetargs(args, "|O&|O&|O&|O&", PyMac_GetOSType, &list[0],
 | 
			
		||||
			 PyMac_GetOSType, &list[1], PyMac_GetOSType, &list[2],
 | 
			
		||||
			  PyMac_GetOSType, &list[3]) )
 | 
			
		||||
		return NULL;
 | 
			
		||||
#else
 | 
			
		||||
	if (!newgetargs(args, "|O&", PyMac_GetOSType, &list[0]) )
 | 
			
		||||
		return NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	while ( list[numtypes] && numtypes < 4 ) {
 | 
			
		||||
		memcpy((char *)&typelist[numtypes], list[numtypes], 4);
 | 
			
		||||
		numtypes++;
 | 
			
		||||
	}
 | 
			
		||||
	StandardGetFile((FileFilterUPP)0, numtypes, typelist, &reply);
 | 
			
		||||
	return mkvalue("(iO)", reply.sfGood, PyMac_BuildFSSpec(&reply.sfFile));
 | 
			
		||||
	return mkvalue("(Oi)", newmfssobject(&reply.sfFile), reply.sfGood);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_FSSpecNormalize(self, args)
 | 
			
		||||
mfs_StandardPutFile(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	Str255 prompt, dft;
 | 
			
		||||
	StandardFileReply reply;
 | 
			
		||||
	
 | 
			
		||||
	dft[0] = 0;
 | 
			
		||||
	if (!newgetargs(args, "O&|O&", PyMac_GetStr255, &prompt, PyMac_GetStr255, &dft) )
 | 
			
		||||
		return NULL;
 | 
			
		||||
	StandardPutFile(prompt, dft, &reply);
 | 
			
		||||
	return mkvalue("(Oi)",newmfssobject(&reply.sfFile), reply.sfGood);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_FSSpec(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -128,38 +450,16 @@ mfs_FSSpecNormalize(self, args)
 | 
			
		|||
 | 
			
		||||
	if (!newgetargs(args, "O&", PyMac_GetFSSpec, &fss))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return PyMac_BuildFSSpec(&fss);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static object *
 | 
			
		||||
mfs_FSSpecPath(self, args)
 | 
			
		||||
	object *self;	/* Not used */
 | 
			
		||||
	object *args;
 | 
			
		||||
{
 | 
			
		||||
	FSSpec fss;
 | 
			
		||||
	char strbuf[257];
 | 
			
		||||
	OSErr err;
 | 
			
		||||
 | 
			
		||||
	if (!newgetargs(args, "O&", PyMac_GetFSSpec, &fss))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	err = nfullpath(&fss, strbuf);
 | 
			
		||||
	if ( err ) {
 | 
			
		||||
		PyErr_Mac(ErrorObject, err);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	return newstringobject(strbuf);
 | 
			
		||||
	return (object *)newmfssobject(&fss);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* List of methods defined in the module */
 | 
			
		||||
 | 
			
		||||
static struct methodlist mfs_methods[] = {
 | 
			
		||||
	{"NewAlias",		mfs_NewAlias,			1},
 | 
			
		||||
	{"ResolveAlias",	mfs_ResolveAlias,		1},
 | 
			
		||||
	{"ResolveAliasFile",mfs_ResolveAliasFile,	1},
 | 
			
		||||
	{"StandardPutFile",	mfs_StandardPutFile,	1},
 | 
			
		||||
	{"ResolveAliasFile",	mfs_ResolveAliasFile,	1},
 | 
			
		||||
	{"StandardGetFile",		mfs_StandardGetFile,	1},
 | 
			
		||||
	{"FSSpecNormalize",	mfs_FSSpecNormalize,	1},
 | 
			
		||||
	{"FSSpecPath",		mfs_FSSpecPath,	1},
 | 
			
		||||
	{"StandardPutFile",		mfs_StandardPutFile,	1},
 | 
			
		||||
	{"FSSpec",				mfs_FSSpec,				1},
 | 
			
		||||
 
 | 
			
		||||
	{NULL,		NULL}		/* sentinel */
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue