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