[Win32utils-devel] PathIsURL and frozen strings

Daniel Berger djberg96 at gmail.com
Sun Jul 13 10:32:18 EDT 2008

Park Heesob wrote:
> Hi,
> ----- Original Message ----- 
> From: "Daniel Berger" <djberg96 at gmail.com>
> To: "win32utils-devel" <win32utils-devel at rubyforge.org>
> Sent: Sunday, July 13, 2008 9:37 PM
> Subject: [Win32utils-devel] PathIsURL and frozen strings
>> Hi all,
>> I may have brought this up a long time ago, but I've forgotten. Why does 
>> PathIsURL(path) fail if 'path' is frozen?
>> require 'windows/path'
>> include Windows::Path
>> path = "file://C:\\Documents and Settings\\djberge"
>> PathIsURL(path) # true
>> path.freeze
>> PathIsURL(path) # Boom!
>> TypeError: can't modify frozen string
>>         from (eval):3:in `call'
>>         from (eval):3:in `PathIsURL'
>>         from (irb):9
>> Any ideas? I realize I can just dup the string, but I thought I'd ask.
> In the win32-api, the string type('P') denotes both input and output pointer 
> parameter.
> Thus the string parameter can be modified and must not be frozen.
> In case of pure input string, you can define another parameter type and skip
> rb_str_modify(v_arg) (line #584 of win32/api.c)

Ah, yes, thanks. I suppose we could add an "S" prototype for pure input 
strings, but I'm not sure the benefit outweighs the cost of adding yet 
another prototype.

What do you think?



More information about the win32utils-devel mailing list