Re: [swift-users] UnsafePointer and C-String

2017-01-03 Thread Ole Begemann via swift-users

What I cannot find though is the guarantee that the buffer where the
String is converted to an UTF8 sequence is always null-terminated.

I very much suspect it is, and all my tests did find a null-terminated
string.

Question: Does anybody know for sure that the buffer is always
null-terminated? (a link to where I can check this would be most
appreciated)


I'm not 100% certain, but I think the compiler uses this function to 
convert a String argument to a pointer:


/// Derive a UTF-8 pointer argument from a value string parameter.
public // COMPILER_INTRINSIC
func _convertConstStringToUTF8PointerArgument<
  ToPointer : _Pointer
>(_ str: String) -> (AnyObject?, ToPointer) {
  let utf8 = Array(str.utf8CString)
  return _convertConstArrayToPointerArgument(utf8)
}

Source: Pointer.swift [1]

This in turn calls `String.utf8CString` [2], which indeed returns a 
null-terminated string.


[1]: 
https://github.com/apple/swift/blob/master/stdlib/public/core/Pointer.swift#L85-L92
[2]: 
https://github.com/apple/swift/blob/master/stdlib/public/core/StringUTF8.swift#L383-L405


___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


Re: [swift-users] UnsafePointer and C-String

2017-01-03 Thread Jeremy Pereira via swift-users

> On 3 Jan 2017, at 12:28, Rien via swift-users  wrote:
> 
> The documentation at 
> https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html
>  shows that it is possible to use String where an UnsafePointer is 
> needed.
> API calls to C that need a char* are translated to UnsafePointer.
> It follows that we can use a String where a char* is needed.
> 
> However in C a string is not only a char*, it is also null-terminated.
> 
> What I cannot find though is the guarantee that the buffer where the String 
> is converted to an UTF8 sequence is always null-terminated.
> 
> I very much suspect it is, and all my tests did find a null-terminated string.
> 
> Question: Does anybody know for sure that the buffer is always 
> null-terminated? (a link to where I can check this would be most appreciated)
> 

String has a property called utf8CString which is documented as "A contiguously 
stored null-terminated UTF-8 representation of the string.” I’d use that.


> Regards,
> Rien
> 
> Site: http://balancingrock.nl
> Blog: http://swiftrien.blogspot.com
> Github: http://github.com/Swiftrien
> Project: http://swiftfire.nl
> 
> 
> 
> 
> ___
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


[swift-users] UnsafePointer and C-String

2017-01-03 Thread Rien via swift-users
The documentation at 
https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html
 shows that it is possible to use String where an UnsafePointer is needed.
API calls to C that need a char* are translated to UnsafePointer.
It follows that we can use a String where a char* is needed.

However in C a string is not only a char*, it is also null-terminated.

What I cannot find though is the guarantee that the buffer where the String is 
converted to an UTF8 sequence is always null-terminated.

I very much suspect it is, and all my tests did find a null-terminated string.

Question: Does anybody know for sure that the buffer is always null-terminated? 
(a link to where I can check this would be most appreciated)

Regards,
Rien

Site: http://balancingrock.nl
Blog: http://swiftrien.blogspot.com
Github: http://github.com/Swiftrien
Project: http://swiftfire.nl




___
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users