Ticket #252: libbasic_fix_1_of_1_rev_fb93b820a013_Issue__252__Smalltak_X_is_writing_Windows_Registry_only_in_ASCII_but_registry_is_UTF16.patch

File libbasic_fix_1_of_1_rev_fb93b820a013_Issue__252__Smalltak_X_is_writing_Windows_Registry_only_in_ASCII_but_registry_is_UTF16.patch, 3.4 KB (added by patrik.svestka@…, 5 years ago)

Patches for UTF16 write, delete, create

  • Win32OperatingSystem.st

    # HG changeset patch
    # User Patrik Svestka <patrik.svestka@gmail.com>
    # Date 1544457173 -3600
    #      Mon Dec 10 16:52:53 2018 +0100
    # Branch jv
    # Node ID fb93b820a0133352367ef243f2729eba36fd890f
    # Parent  6aec7cb6d153ac0fe318dfd7dfbbaf9f1bbd532f
    Issue #252: Smalltak/X is writing Windows Registry only in ASCII but registry is UTF16
    minor refactorings:
     - changed name to nameString to indicate that the parameter must be a string
     - deleted superfluous comment
    
    diff -r 6aec7cb6d153 -r fb93b820a013 Win32OperatingSystem.st
    a b  
    1605516055
    1605616056    errorNumber notNil ifTrue:[
    1605716057        errorNumber == 87 ifTrue:[ "/ 87 (0x57) ... ERROR_INVALID_PARAMETER
    16058             self primitiveFailed: '32/64bit registry view requested but no RegDeleteKeyExW(). Windows too old?'
     16058            self primitiveFailed: '32/64bit registry view requested but no RegDeleteKeyExW(). Windows too old? (hint: set flags to nil)'
    1605916059        ].
    1606016060            (OperatingSystem errorHolderForNumber:errorNumber) reportError.
    1606116061       
     
    1645816458    "
    1645916459!
    1646016460
    16461 deleteValueNamed:name
     16461deleteValueNamed:nameString
    1646216462    "delete a value.
    1646316463     Return true on success."
    1646416464
    1646516465    |nameUtf16Z errorNumber|
    1646616466
    16467     "/ name must be a string
    1646816467    "/ adding terminating null into empty string
    16469     name notNil ifTrue:[
    16470         nameUtf16Z := name isEmpty ifTrue:[(name, (Character codePoint: 0)) asUnicode16String] "/ needed for defaultValue
    16471                                   ifFalse:[name asUnicode16StringZ]
     16468    nameString notNil ifTrue:[
     16469        nameUtf16Z := nameString isEmpty ifTrue:[(nameString, (Character codePoint: 0)) asUnicode16String] "/ needed for defaultValue
     16470                                  ifFalse:[nameString asUnicode16StringZ]
    1647216471    ].
    1647316472
    1647416473%{
     
    1682216821    "
    1682316822!
    1682416823
    16825 valueNamed:name put:data
     16824valueNamed:nameString put:data
    1682616825    "store a value; the value type depends upon the stored value:
    1682716826    ByteArray       -> REG_BINARY
    1682816827    String          -> REG_SZ
     
    1683016829    Integer         -> REG_DWORD
    1683116830    nil             -> REG_NONE
    1683216831    "
    16833     "Transcript showCR: 'name:', name.
    16834     Transcript showCR: 'data:', data."
    1683516832   
    16836     ^ self valueNamed:name put:data unexpandedReferences:false
    16837 !
    16838 
    16839 valueNamed:name put:data unexpandedReferences:containsUnexpandedReferences
     16833    ^ self valueNamed:nameString put:data unexpandedReferences:false
     16834!
     16835
     16836valueNamed:nameString put:data unexpandedReferences:containsUnexpandedReferences
    1684016837    "store a value; the value type depends upon the stored value:
    1684116838        ByteArray       -> REG_BINARY
    1684216839        String          -> REG_SZ OR REG_EXPAND_SZ based on containsUnexpandedReferences
     
    1685516852
    1685616853    |nameUtf16Z dataUtf16Z stringArray errorNumber|
    1685716854
    16858     "/ name must be a string
    16859     "/ name asUnicodeString and null terminated
    16860     name notNil ifTrue:[
    16861         nameUtf16Z := name isEmpty ifTrue:[(name, (Character codePoint: 0)) asUnicode16String] "/ needed for defaultValue:
    16862                                   ifFalse:[name asUnicode16StringZ]
     16855    "/ nameString asUnicodeString and null terminated
     16856    nameString notNil ifTrue:[
     16857        nameUtf16Z := nameString isEmpty ifTrue:[(nameString, (Character codePoint: 0)) asUnicode16String] "/ needed for defaultValue:
     16858                                  ifFalse:[nameString asUnicode16StringZ]
    1686316859    ].
    1686416860   "/ data asUnicode16String and null terminated
    1686516861    data notNil ifTrue:[