diff -r 2047840e1521 -r 29c5db48dd57 Win32OperatingSystem.st --- a/Win32OperatingSystem.st Fri Nov 27 17:16:41 2015 +0100 +++ b/Win32OperatingSystem.st Fri Nov 27 21:18:20 2015 +0100 @@ -878,7 +878,6 @@ "Modified: 7.1.1997 / 19:36:11 / stefan" ! ! - !Win32OperatingSystem class methodsFor:'OS signal constants'! sigABRT @@ -1624,47 +1623,47 @@ int __modeBits = 0; if (__fileAttr & FILE_ATTRIBUTE_DIRECTORY) { - type = @symbol(directory); - __modeBits = 0777; /* executable and WRITABLE - refer to comment in #isWritable: */ + type = @symbol(directory); + __modeBits = 0777; /* executable and WRITABLE - refer to comment in #isWritable: */ } else if (__fileAttr & FILE_ATTRIBUTE_REPARSE_POINT) { - type = @symbol(symbolicLink); - __modeBits = 0777; /* even in UNIX symlinks have 0777 */ + type = @symbol(symbolicLink); + __modeBits = 0777; /* even in UNIX symlinks have 0777 */ } else { - type = @symbol(regular); - if (__fileAttr & FILE_ATTRIBUTE_READONLY) { - __modeBits = 0444; - } else { - __modeBits = 0666; - } + type = @symbol(regular); + if (__fileAttr & FILE_ATTRIBUTE_READONLY) { + __modeBits = 0444; + } else { + __modeBits = 0666; + } } modeBits = __mkSmallInteger(__modeBits); %}. osCrtTime isNil - ifTrue: [crtTime := Timestamp now] - ifFalse:[crtTime := Timestamp new fromOSTime:(osCrtTime - OperatingSystem osTimeOf19700101)]. + ifTrue: [crtTime := Timestamp now] + ifFalse:[crtTime := Timestamp new fromOSTime:(osCrtTime - OperatingSystem osTimeOf19700101)]. osAccTime isNil - ifTrue: [accTime := Timestamp now] - ifFalse:[accTime := Timestamp new fromOSTime:(osAccTime - OperatingSystem osTimeOf19700101)]. + ifTrue: [accTime := Timestamp now] + ifFalse:[accTime := Timestamp new fromOSTime:(osAccTime - OperatingSystem osTimeOf19700101)]. osModTime isNil - ifTrue: [modTime := accTime] - ifFalse:[modTime := Timestamp new fromOSTime:(osModTime - OperatingSystem osTimeOf19700101)]. + ifTrue: [modTime := accTime] + ifFalse:[modTime := Timestamp new fromOSTime:(osModTime - OperatingSystem osTimeOf19700101)]. ^ FileStatusInfo - type:type - mode:modeBits - uid:nil - gid:nil - size:fileSize - id:0 - accessed:accTime - modified:modTime - created:crtTime - sourcePath:(osPathname asSingleByteStringIfPossible) - fullName:nil - alternativeName:nil. + type:type + mode:modeBits + uid:nil + gid:nil + size:fileSize + id:0 + accessed:accTime + modified:modTime + created:crtTime + sourcePath:osPathname + fullName:nil + alternativeName:nil. ! nextLinkInfoFrom:aDirectoryStream dirPointer:dirPointer @@ -1679,45 +1678,45 @@ if ((dirPointer != nil) && __isExternalAddressLike(dirPointer)) { - // __INST(lastErrorNumber) = nil; - d = __externalAddressVal(dirPointer); - - do { - __threadErrno = 0; - rslt = STX_API_NOINT_CALL2( "FindNextFileW", FindNextFileW, d, &data ); - } while ((rslt < 0) && (__threadErrno == EINTR)); - - if (rslt > 0) { - fileSize = __MKLARGEINT64(1, data.nFileSizeLow, data.nFileSizeHigh); - osPathname = __MKU16STRING( data.cFileName ); - osFileAttributes = __mkSmallInteger( data.dwFileAttributes ); - - osCrtTime = FileTimeToOsTime(&data.ftCreationTime); - osAccTime = FileTimeToOsTime(&data.ftLastAccessTime); - osModTime = FileTimeToOsTime(&data.ftLastWriteTime); - - } else { - error = __mkSmallInteger( __threadErrno ); - } + // __INST(lastErrorNumber) = nil; + d = __externalAddressVal(dirPointer); + + do { + __threadErrno = 0; + rslt = STX_API_NOINT_CALL2( "FindNextFileW", FindNextFileW, d, &data ); + } while ((rslt < 0) && (__threadErrno == EINTR)); + + if (rslt > 0) { + fileSize = __MKLARGEINT64(1, data.nFileSizeLow, data.nFileSizeHigh); + osPathname = __mkStringOrU16String_maxlen( data.cFileName ); + osFileAttributes = __mkSmallInteger( data.dwFileAttributes ); + + osCrtTime = FileTimeToOsTime(&data.ftCreationTime); + osAccTime = FileTimeToOsTime(&data.ftLastAccessTime); + osModTime = FileTimeToOsTime(&data.ftLastWriteTime); + + } else { + error = __mkSmallInteger( __threadErrno ); + } } %}. (error notNil and:[error ~~ 0]) ifTrue:[ - ^ StreamIOError newException - errorCode:error; - osErrorHolder:(OperatingSystem errorHolderForNumber:error); - parameter:aDirectoryStream; - raiseRequest + ^ StreamIOError newException + errorCode:error; + osErrorHolder:(OperatingSystem errorHolderForNumber:error); + parameter:aDirectoryStream; + raiseRequest ]. osPathname isNil ifTrue:[^ nil]. ^ self - linkInfoFor:osPathname - fileSize:fileSize - fileAttributes:osFileAttributes - osCrtTime:osCrtTime - osAccTime:osAccTime - osModTime:osModTime + linkInfoFor:osPathname + fileSize:fileSize + fileAttributes:osFileAttributes + osCrtTime:osCrtTime + osAccTime:osAccTime + osModTime:osModTime ! ! !Win32OperatingSystem class methodsFor:'error messages'! @@ -5166,18 +5165,16 @@ getCurrentDirectory "get the current directory" - |dir| -%{ +%{ /* NOCONTEXT */ int ret; wchar_t _aPathName[MAXPATHLEN+1]; ret = GetCurrentDirectoryW(MAXPATHLEN, _aPathName); if (ret == 0) { - __threadErrno = __WIN32_ERR(GetLastError()); - } - dir = __MKU16STRING(_aPathName); -%}. - ^ dir asSingleByteStringIfPossible + __threadErrno = __WIN32_ERR(GetLastError()); + } + RETURN(__mkStringOrU16String_maxlen(_aPathName)); +%}. " self getCurrentDirectory @@ -5407,41 +5404,41 @@ wchar_t _aPathName[MAXPATHLEN+1]; if (__isStringLike(aPathName)) { - int i; - INT l = __stringSize(aPathName); - - if (l > MAXPATHLEN) l = MAXPATHLEN; - - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + + for (i=0; i sizeof(buff)) { - char *buff2; - - buff2 = (char *)malloc(nNeeded); - GetEnvironmentVariableA(__stringVal(aStringOrSymbol), - buff2, - nNeeded); - ret = __MKSTRING(buff2); - free(buff2); - } else { - if (nNeeded > 0) { - ret = __MKSTRING(buff); - } - } - RETURN (ret); - } + l = __stringSize(aStringOrSymbol); + if (l > sizeof(_varName)-1) + goto badArgument; + for (i=0; i sizeof(_varName)-1) + goto badArgument; + for (i=0; i sizeof(buff)) { + WCHAR *buff2; + + buff2 = (char *)malloc(nNeeded * sizeof(WCHAR)); + GetEnvironmentVariableW(_varName, buff2, nNeeded); + ret = __mkStringOrU16String_maxlen(buff2, nNeeded); + free(buff2); + } else if (nNeeded > 0) { + ret = __mkStringOrU16String_maxlen(buff, nNeeded); + } + RETURN (ret); + +badArgument:; %} . ^ nil " - OperatingSystem getEnvironment:'LANG' - OperatingSystem getEnvironment:'LOGIN' - OperatingSystem getEnvironment:'HOME' - OperatingSystem getEnvironment:'NNTPSERVER' - OperatingSystem getEnvironment:'MAIL' OperatingSystem getEnvironment:'PATH' " @@ -7918,18 +7904,14 @@ // Note: GetComputerNameExA can fail in certain locales! #if defined(__MINGW32__) if (GetComputerNameA(bufferA, &buffSize) == TRUE) { - hostName = __MKSTRING_L(bufferA, buffSize); + RETURN(__MKSTRING_L(bufferA, buffSize)); } #else if (GetComputerNameExW(ComputerNameDnsFullyQualified, buffer, &buffSize) == TRUE) { - hostName = __MKU16STRING_MAXLEN(buffer, buffSize); - } -#endif -%}. - hostName isNil ifTrue:[ - ^ nil. - ]. - ^ hostName asSingleByteStringIfPossible + RETURN(__mkStringOrU16String_maxlen(buffer, buffSize)); + } +#endif +%}. " OperatingSystem getHostName @@ -12212,14 +12194,14 @@ "/ access lazily... fullPathName isNil ifTrue:[ - fullPathName := (OperatingSystem getLongPathName:sourcePath) asSingleByteStringIfPossible. + fullPathName := OperatingSystem getLongPathName:sourcePath. ]. ^ fullPathName " - 'C:\' asFilename info fullPathName - 'C:\Dokumente und Einstellungen' asFilename info fullPathName + 'C:\' asFilename info fullPathName + 'C:\Dokumente und Einstellungen' asFilename info fullPathName " !