Hi all,
Would you find it useful to have an immutable string type in gnulib?
In the simplest case, this would a 'const char *' where the 'const' is
actually checked by the hardware. You allocate it through
const char *str = iasprintf (...);
You use it like any 'const char *'.
You free it through
ifree (str);
not free (str). And when you attempt to write into it:
((char *) str)[0] = 'x';
it crashes.
The benefits I imagine:
- no worry about security flaws through multithreaded accesses,
- in large applications: verification that no part of the application
is doing side effects that it shouldn't.
The implementation uses mmap() to create a read-only and a read-write
view of the same memory area. The contents of the string is filled through
the read-write view. All other operations are done through the read-only
view, because the address os the string is the one of the read-only view.
This won't work on all platforms, e.g. HP-UX. But it will work on glibc
systems, BSD, and Solaris, at least.
Bruno