# More descriptive aliases of rb\_str\_new\[2-5\] (Re: \[request\]C API$B$N3HD%(B)

**URL:** <https://www.ruby-forum.com/t/more-descriptive-aliases-of-rb-str-new-2-5-re-request-c-api-b-n3hd-b/143623>\
**Category:** Development\
**Created:** [July 21, 2008, 9:46am UTC](https://www.ruby-forum.com/t/more-descriptive-aliases-of-rb-str-new-2-5-re-request-c-api-b-n3hd-b/143623 "2008-07-21T09:46:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [July 21, 2008, 9:46am UTC](https://www.ruby-forum.com/t/more-descriptive-aliases-of-rb-str-new-2-5-re-request-c-api-b-n3hd-b/143623/1 "2008-07-21T09:46:19Z")

</div>

e$B$J$+$@$G$9!#e(B

At Mon, 21 Jul 2008 16:31:02 +0900,  
Nobuyoshi N. wrote in [ruby-dev:35614]:

> > print()e$B$He(Bprintf()e$B$N0c$$$,e(Bfe$B$@$1$J$N$G$=$l$G==J,$+$H;W$C$F$7$^$$e(B  
> > e$B$^$7$?!#L\>A0$K$D$$$F$OFC$K$3$@$o$j$O$"$j$^$;$s!#e(BRubye$B$N47=,$K=\>e(B  
> > e$B$&$J$i$P!$e(Brb\_str\_new6()e$B$H$$$&$3$H$K$J$k$G$7$g$&$+!#e(B
> 
> e$B$b$&e(Bnew+e$B?t;z$O$d$a$^$7$g$&$h!#$9$G$K$"$k$b$N$O$H$b$+$/!":#$5$iA}e(B  
> e$B$d$9$3$H$O$J$$$G$7$g$&!#e(B

e$BJLL\>$rIU$1$F$\_$^$7$?!#e(B

rb\_str\_new2 -\> rb\_str\_new\_cstr  
rb\_str\_new3 -\> rb\_str\_new\_shared  
rb\_str\_new4 -\> rb\_str\_new\_frozen  
rb\_str\_new5 -\> rb\_str\_new\_with\_class

e$B$I$s$J$b$s$G$7$g$&$+!#e(B

# Index: include/ruby/intern.h

— include/ruby/intern.h (revision 18139)  
+++ include/ruby/intern.h (working copy)  
@@ -527,35 +527,49 @@ VALUE rb\_str\_format(int, const VALUE _,  
/_ string.c _/  
VALUE rb\_str\_new(const char_, long);  
+VALUE rb\_str\_new\_cstr(const char\*);  
VALUE rb\_str\_new2(const char\*);  
+VALUE rb\_str\_new\_shared(VALUE);  
VALUE rb\_str\_new3(VALUE);  
+VALUE rb\_str\_new\_frozen(VALUE);  
VALUE rb\_str\_new4(VALUE);  
+VALUE rb\_str\_new\_with\_class(VALUE, const char\*, long);  
VALUE rb\_str\_new5(VALUE, const char\*, long);  
VALUE rb\_tainted\_str\_new(const char\*, long);  
+VALUE rb\_tainted\_str\_new\_cstr(const char\*);  
VALUE rb\_tainted\_str\_new2(const char\*);  
VALUE rb\_str\_buf\_new(long);  
+VALUE rb\_str\_buf\_new\_cstr(const char\*);  
VALUE rb\_str\_buf\_new2(const char\*);  
VALUE rb\_str\_tmp\_new(long);  
VALUE rb\_usascii\_str\_new(const char\*, long);  
+VALUE rb\_usascii\_str\_new\_cstr(const char\*);  
VALUE rb\_usascii\_str\_new2(const char\*);  
#if defined **GNUC**  
-#define rb\_str\_new2(str) **extension** (   
+#define rb\_str\_new\_cstr(str) **extension** (   
{ \

- (\_\_builtin\_constant\_p(str)) ? \

- (\_\_builtin\_constant\_p(str)) ?   
rb\_str\_new(str, strlen(str)) : \

- rb\_str\_new2(str); \

- rb\_str\_new\_cstr(str);   
})  
-#define rb\_tainted\_str\_new2(str) **extension** (   
+#define rb\_tainted\_str\_new\_cstr(str) **extension** (   
{   
(\_\_builtin\_constant\_p(str)) ?   
rb\_tainted\_str\_new(str, strlen(str)) : \

- rb\_tainted\_str\_new2(str); \

- rb\_tainted\_str\_new\_cstr(str);   
})  
-#define rb\_usascii\_str\_new2(str) **extension** (   
+#define rb\_usascii\_str\_new\_cstr(str) **extension** (   
{   
(\_\_builtin\_constant\_p(str)) ?   
rb\_usascii\_str\_new(str, strlen(str)) : \

- rb\_usascii\_str\_new2(str); \

- rb\_usascii\_str\_new\_cstr(str);   
})  
#endif  
+#define rb\_str\_new2 rb\_str\_new\_cstr  
+#define rb\_str\_new3 rb\_str\_new\_shared  
+#define rb\_str\_new4 rb\_str\_new\_frozen  
+#define rb\_str\_new5 rb\_str\_new\_with\_class  
+#define rb\_tainted\_str\_new2 rb\_tainted\_str\_new\_cstr  
+#define rb\_str\_buf\_new2 rb\_str\_buf\_new\_cstr  
+#define rb\_usascii\_str\_new2 rb\_usascii\_str\_new\_cstr  
void rb\_str\_free(VALUE);  
void rb\_str\_shared\_replace(VALUE, VALUE);  
@@ -570,4 +584,5 @@ VALUE rb\_str\_locktmp(VALUE);  
VALUE rb\_str\_unlocktmp(VALUE);  
VALUE rb\_str\_dup\_frozen(VALUE);  
+#define rb\_str\_dup\_frozen rb\_str\_new\_frozen  
VALUE rb\_str\_plus(VALUE, VALUE);  
VALUE rb\_str\_times(VALUE, VALUE);  
Index: string.c  
===================================================================  
— string.c (revision 18139)  
+++ string.c (working copy)  
@@ -26,11 +26,27 @@  
#endif

+#undef rb\_str\_new\_cstr  
+#undef rb\_tainted\_str\_new\_cstr  
+#undef rb\_usascii\_str\_new\_cstr  
#undef rb\_str\_new2  
+#undef rb\_str\_new3  
+#undef rb\_str\_new4  
+#undef rb\_str\_new5  
#undef rb\_tainted\_str\_new2  
+#undef rb\_str\_buf\_new2  
#undef rb\_usascii\_str\_new2  
+#undef rb\_str\_dup\_frozen

VALUE rb\_cString;  
VALUE rb\_cSymbol;

+#ifdef **GNUC**  
+#define alias\_func(old\_prot, new\_name, args)   
+VALUE old\_prot **attribute** ((alias(#new\_name)));  
+#else  
+#define alias\_func(old\_prot, new\_name, args)   
+VALUE old\_prot {return new\_name args;}  
+#endif  
+  
#define STR\_TMPLOCK FL\_USER7  
#define STR\_NOEMBED FL\_USER1  
@@ -400,5 +416,5 @@ rb\_enc\_str\_new(const char \*ptr, long len

VALUE  
-rb\_str\_new2(const char \*ptr)  
+rb\_str\_new\_cstr(const char \*ptr)  
{  
if (!ptr) {  
@@ -408,6 +424,9 @@ rb\_str\_new2(const char \*ptr)  
}

+alias\_func(rb\_str\_new2(const char \*ptr), rb\_str\_new\_cstr, (ptr))  
+#define rb\_str\_new2 rb\_str\_new\_cstr  
+  
VALUE  
-rb\_usascii\_str\_new2(const char \*ptr)  
+rb\_usascii\_str\_new\_cstr(const char \*ptr)  
{  
VALUE str = rb\_str\_new2(ptr);  
@@ -416,4 +435,7 @@ rb\_usascii\_str\_new2(const char \*ptr)  
}

+alias\_func(rb\_usascii\_str\_new2(const char \*ptr),  
rb\_usascii\_str\_new\_cstr, (ptr))  
+#define rb\_usascii\_str\_new2 rb\_usascii\_str\_new\_cstr  
+  
VALUE  
rb\_tainted\_str\_new(const char \*ptr, long len)  
@@ -426,5 +448,5 @@ rb\_tainted\_str\_new(const char \*ptr, long

VALUE  
-rb\_tainted\_str\_new2(const char \*ptr)  
+rb\_tainted\_str\_new\_cstr(const char \*ptr)  
{  
VALUE str = rb\_str\_new2(ptr);  
@@ -434,4 +456,7 @@ rb\_tainted\_str\_new2(const char \*ptr)  
}

+alias\_func(rb\_tainted\_str\_new2(const char \*ptr),  
rb\_tainted\_str\_new\_cstr, (ptr))  
+#define rb\_tainted\_str\_new2 rb\_tainted\_str\_new\_cstr  
+  
static VALUE  
str\_replace\_shared(VALUE str2, VALUE str)  
@@ -467,5 +492,5 @@ str\_new3(VALUE klass, VALUE str)

VALUE  
-rb\_str\_new3(VALUE str)  
+rb\_str\_new\_shared(VALUE str)  
{  
VALUE str2 = str\_new3(rb\_obj\_class(str), str);  
@@ -475,4 +500,7 @@ rb\_str\_new3(VALUE str)  
}

+alias\_func(rb\_str\_new3(VALUE str), rb\_str\_new\_shared, (str))  
+#define rb\_str\_new3 rb\_str\_new\_shared  
+  
static VALUE  
str\_new4(VALUE klass, VALUE str)  
@@ -498,5 +526,5 @@ str\_new4(VALUE klass, VALUE str)

VALUE  
-rb\_str\_new4(VALUE orig)  
+rb\_str\_new\_frozen(VALUE orig)  
{  
VALUE klass, str;  
@@ -535,10 +563,17 @@ rb\_str\_new4(VALUE orig)  
}

+alias\_func(rb\_str\_new4(VALUE orig), rb\_str\_new\_frozen, (orig))  
+#define rb\_str\_new4 rb\_str\_new\_frozen  
+  
VALUE  
-rb\_str\_new5(VALUE obj, const char \*ptr, long len)  
+rb\_str\_new\_with\_class(VALUE obj, const char \*ptr, long len)  
{  
return str\_new(rb\_obj\_class(obj), ptr, len);  
}

+alias\_func(rb\_str\_new5(VALUE obj, const char \*ptr, long len),

- 

```
rb_str_new_with_class, (obj, ptr, len))

```

+#define rb\_str\_new5 rb\_str\_new\_with\_class  
+  
#define STR\_BUF\_MIN\_SIZE 128

@@ -560,5 +595,5 @@ rb\_str\_buf\_new(long capa)

VALUE  
-rb\_str\_buf\_new2(const char \*ptr)  
+rb\_str\_buf\_new\_cstr(const char \*ptr)  
{  
VALUE str;  
@@ -571,4 +606,7 @@ rb\_str\_buf\_new2(const char \*ptr)  
}

+alias\_func(rb\_str\_buf\_new2(const char \*ptr), rb\_str\_buf\_new\_cstr,  
(ptr))  
+#define rb\_str\_buf\_new2 rb\_str\_buf\_new\_cstr  
+  
VALUE  
rb\_str\_tmp\_new(long len)  
@@ -1311,19 +1349,6 @@ rb\_str\_freeze(VALUE str)  
}

-VALUE  
-rb\_str\_dup\_frozen(VALUE str)  
-{

- if (STR\_SHARED\_P(str) && RSTRING(str)-\>as.heap.aux.shared) {
- VALUE shared = RSTRING(str)-\>as.heap.aux.shared;
- if (RSTRING\_LEN(shared) == RSTRING\_LEN(str)) {
- 

```
 OBJ_FREEZE(shared);

```

- 

```
 return shared;

```

- }
- }
- if (OBJ\_FROZEN(str)) return str;
- str = rb\_str\_dup(str);
- OBJ\_FREEZE(str);
- return str;  
-}  
+alias\_func(rb\_str\_dup\_frozen(VALUE str), rb\_str\_new\_frozen, (str))  
+#define rb\_str\_dup\_frozen rb\_str\_new\_frozen

VALUE
