Example #1
0
primitiveDirectoryEntry(void)
{
    sqInt createDate;
    sqInt dirFlag;
    char entryName[256];
    sqInt entryNameSize;
    squeakFileOffsetType fileSize;
    sqInt modifiedDate;
    sqInt okToList;
    sqInt pathName;
    char *pathNameIndex;
    sqInt pathNameSize;
    char *reqNameIndex;
    sqInt reqNameSize;
    sqInt requestedName;
    sqInt status;

	requestedName = interpreterProxy->stackValue(0);
	pathName = interpreterProxy->stackValue(1);
	if (!(interpreterProxy->isBytes(pathName))) {
		return interpreterProxy->primitiveFail();
	}
	pathNameIndex = interpreterProxy->firstIndexableField(pathName);
	pathNameSize = interpreterProxy->byteSizeOf(pathName);
	reqNameIndex = interpreterProxy->firstIndexableField(requestedName);

	/* If the security plugin can be loaded, use it to check for permission. 
	If not, assume it's ok */

	reqNameSize = interpreterProxy->byteSizeOf(requestedName);
	if (sCLPfn != 0) {
		okToList = ((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize);
	}
	else {
		okToList = 1;
	}
	if (okToList) {
		status = dir_EntryLookup(pathNameIndex, pathNameSize, reqNameIndex, reqNameSize,
													  entryName, &entryNameSize, &createDate,
													  &modifiedDate, &dirFlag, &fileSize);
	}
	else {
		status = DirNoMoreEntries;
	}
	if (interpreterProxy->failed()) {
		return null;
	}
	if (status == DirNoMoreEntries) {
		interpreterProxy->popthenPush(3, interpreterProxy->nilObject());
		return null;
	}
	if (status == DirBadPath) {
		return interpreterProxy->primitiveFail();
	}
	interpreterProxy->popthenPush(3, makeDirEntryNamesizecreateDatemodDateisDirfileSize(entryName, entryNameSize, createDate, modifiedDate, dirFlag, fileSize));
}
primitiveDirectoryEntry(void)
{
	// FilePlugin>>#primitiveDirectoryEntry
    sqInt createDate;
    sqInt dirFlag;
    char entryName[256];
    sqInt entryNameSize;
    squeakFileOffsetType fileSize;
    sqInt modifiedDate;
    sqInt okToList;
    sqInt pathName;
    char *pathNameIndex;
    sqInt pathNameSize;
    sqInt posixPermissions;
    char *reqNameIndex;
    sqInt reqNameSize;
    sqInt requestedName;
    sqInt status;
    sqInt symlinkFlag;

	requestedName = stackValue(0);
	pathName = stackValue(1);
	if (!(isBytes(pathName))) {
		return primitiveFail();
	}
	pathNameIndex = firstIndexableField(pathName);
	pathNameSize = byteSizeOf(pathName);
	reqNameIndex = firstIndexableField(requestedName);

	/* If the security plugin can be loaded, use it to check for permission.
	   If not, assume it's ok */

	reqNameSize = byteSizeOf(requestedName);
	if (sCLPfn != 0) {
		okToList = ((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize);
	}
	else {
okToList = 1;
	}
	if (okToList) {
status = dir_EntryLookup(
			pathNameIndex, 
			pathNameSize, 
			reqNameIndex, 
			reqNameSize,										  
			entryName, 
			&entryNameSize, 
			&createDate,
			&modifiedDate, 
			&dirFlag, 
			&fileSize, 
			&posixPermissions,
			&symlinkFlag);
	}
	else {
status = DirNoMoreEntries;
	}
	if (failed()) {
		return null;
	}
	if (status == DirNoMoreEntries) {

		/* no entry; return nil */
		/* pop pathName, index, rcvr */

popthenPush(3, nilObject());
		return null;
	}
	if (status == DirBadPath) {
return primitiveFail();
	}
	popthenPush(3, makeDirEntryNamesizecreateDatemodDateisDirfileSizeposixPermissionsisSymlink(entryName, entryNameSize, createDate, modifiedDate, dirFlag, fileSize, posixPermissions, symlinkFlag));
}