Re: Why does octstr_cat() require ostr1 to be non-immutable?

"Rene Kluwen" <[email protected]> Sun, 25 Dec 2016 10:20:09 +0000
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <eme9a88266-f0f2-4fa7-8156-4d3fdcca56a0@rene-pc>
First of all, let me say that I agree with you.
But a possible way of thinking could have been to make octstr_cat make 
like (or look like) strcat().

== Rene

------ Origineel bericht ------
Van: "Werner Coetzee" <[email protected]>
Aan: "[email protected]" <[email protected]>
Verzonden: 21-12-2016 15:39:50
Onderwerp: Why does octstr_cat() require ostr1 to be non-immutable?

>Hi
>
>
>
>Why does the octstr_cat(Octstr *ostr1, Octstr *ostr2) function in 
>gwlib/octstr.c require that ostr1 be non-immutable?
>
>It contains:
>
>gw_assert(!ostr1->immutable);
>
>
>
>I can't see any reason for the requirement since ostr1 is never 
>modified in octstr_cat() so to me octstr_cat() should work perfectly 
>fine/safely if ostr1 is immutable.
>
>And since the requirement is there for ostr1, why is it not there for 
>ostr2?  There's no difference in the way that ostr1 and ostr2 is used.
>
>
>
>I now have to resort to much slower functions such as octstr_format or 
>octstr_insert or octstr_append to get the same result.
>
>
>
>My use case:
>
>
>
>void myfunc(const Octstr *param) // param should/will not be modified
>
>{
>
>     Octstr *newvar = octstr_cat(octstr_imm("PREFIX"), param);  // this 
>will panic
>
>     // Do something with newvar
>
>}
>
>
>
>So my work around is newvar = octstr_format("%s%S", "PREFIX", param); 
>but could also have newvar = octstr_create("PREFIX"); 
>octstr_append(newvar, param); or even newvar = octstr_duplicate(param); 
>octstr_insert(newvar, octstr_imm("PREFIX"), 0);
>
>
>
>I would really appreciate it if someone could shed some light on this, 
>and if the powers that be agree with me remove the assertion?
>
>
>
>Thanks in advance
>
>Werner
>
>
>
>
>   Werner CoetzeeSenior Message Engine Engineer T  +27 21 910 
>[email protected] 
><https://www.clickatell.com>
>
image1a2972.PNG (image/png, 29.6 KB) - not displayed
imagea0c2e2.PNG (image/png, 16.1 KB) - not displayed
imagedf67b0.PNG (image/png, 18.7 KB) - not displayed