[Win32utils-devel] PathIsURL and frozen strings

Park Heesob phasis at gmail.com
Sun Jul 13 09:22:27 EDT 2008

----- 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 
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)


Park Heesob

More information about the win32utils-devel mailing list