[Vm-dev] [Pharo-dev] FileSystem file attributes and #isSymlink patch

Alistair Grant akgrant0710 at gmail.com
Wed Jul 26 21:02:41 UTC 2017


Hi All,

I've realised that I have been doing all my development using an old
version of VMMaker: dtl.392.

Before submitting my plugin I thought I should check that it builds
correctly with the latest VMMaker.

However taking a clean squeak image
(Squeak5.1-16549-32bit-201608171728-Linux) and loading what I believe is
the latest VMMaker: oscog-eem.2257 causes the plugin to fail to compile
with numerous errors (on Ubuntu 16.04, gcc 4.8.5).

Could someone please let me know which version of VMMaker I should be
using?


If you're interested in the sorts of problems I'm facing:

The full code is available from: 

MCHttpRepository
	location: 'http://smalltalkhub.com/mc/Alistair/FileAttributesPlugin/main'
	user: ''
	password: ''


An example of one of the failures is a method that begins:

fileToAttributeArray: cPathName mask: attributeMask array: attributeArray
	"Answer a file attribute array from pathNameOop."

	| getStats useLstat getAccess statArray accessArray combinedArray status fileNameOop statBuf statBufPointer  |
	<returnTypeC: 'int'>
	<var: 'cPathName' type: 'char *'>
	<var: 'attributeArray' type: 'sqInt *'>
	<var: 'statBuf' type: 'struct stat'>
	<var: 'statBufPointer' declareC: 'struct stat *statBufPointer= &statBuf'>


dtl.392 correctly creates C definitions for statBuf and
statBufPointer, i.e.:

static int fileToAttributeArraymaskarray(char *cPathName, sqInt attributeMask, sqInt *attributeArray) {
    sqInt accessArray;
    sqInt combinedArray;
    sqInt fileNameOop;
    sqInt getAccess;
    sqInt getStats;
    sqInt statArray;
    struct stat statBuf;
    struct stat *statBufPointer= &statBuf;
    sqInt status;
    sqInt useLstat;


oscog-eem.2257 produces:


static int
fileToAttributeArraymaskarray(char *cPathName, sqInt attributeMask, sqInt *attributeArray)
{
    sqInt accessArray;
    sqInt combinedArray;
    sqInt fileNameOop;
    int getAccess;
    int getStats;
    sqInt statArray;
    struct stat *statBufPointer= &statBuf;
    sqInt status;
    int useLstat;


As can be seen, the statBuf declaration is missing.


Further along:

isSymlink: cPathName boolean: resultOop
	"Set resultOop to a boolean indicating whether cPathName is a symbolic link.
	Answer status (0 = success)"

	| status statBuf |
	<var: 'cPathName' type: 'char *'>
	<var: 'resultOop' type: 'sqInt *'>
	<var: 'statBuf' type: 'struct stat'>
	self isDefinedTrueExpression: 'HAVE_LSTAT == 1'
		inSmalltalk: []
		comment: ''
		ifTrue: [
			status := self cCode: 'lstat(cPathName, &statBuf)'.
			(status ~= 0) ifTrue: [^self cantStatPath].
			((self cCode: 'S_ISLNK(statBuf.st_mode)') = 0)
				ifFalse: [self cCode: '*resultOop = interpreterProxy->trueObject()']
				ifTrue: [self cCode: '*resultOop = interpreterProxy->falseObject()'].
			]
		ifFalse: [].
	^0



dtl.392 produces:

static sqInt isSymlinkboolean(char *cPathName, sqInt *resultOop) {
    struct stat statBuf;
    sqInt status;

        
# if (HAVE_LSTAT == 1)  // 
        status = lstat(cPathName, &statBuf);
        if (status != 0) {
                return -3;
        }
        if ((S_ISLNK(statBuf.st_mode)) == 0) {
                *resultOop = interpreterProxy->falseObject();
        } else {
                *resultOop = interpreterProxy->trueObject();
        }
# endif  // HAVE_LSTAT == 1
        
        return 0;
}



oscog-eem.2257 produces:

static sqInt
isSymlinkboolean(char *cPathName, sqInt *resultOop)
{
    struct stat statBuf;
    sqInt status;

        isDefinedTrueExpressioninSmalltalkcommentifTrueifFalse("HAVE_LSTAT == 1", null, "", ((status =
 lstat(cPathName, &statBuf)),
        (status != 0
                        ? (/* begin cantStatPath */
                                return -3)
                        : 0),
        ((S_ISLNK(statBuf.st_mode)) == 0
                        ? *resultOop = interpreterProxy->falseObject()
                        : *resultOop = interpreterProxy->trueObject())), null);
        return 0;
}


Any help appreciated.

Thanks very much,
Alistair




On Tue, Jul 25, 2017 at 03:21:16PM +0000, Alistair Grant wrote:
> 
> I'll post another reply once I've got the plugin code in 
> smalltalkhub.com.
> 
> Thanks again,
> Alistair


More information about the Vm-dev mailing list