Why does octstr_cat() require ostr1 to be non-immutable?
Werner Coetzee <[email protected]> Wed, 21 Dec 2016 14:39:50 +0000
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <C89CF0CED2A3BC4FA6BFB423A5C09C6B010816C7CA@COMMS02-CPT.internal.clickatell.com> |
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
[cid:[email protected]]
Werner Coetzee
Senior Message Engine Engineer
[cid:[email protected]]
T +27 21 910 7700
[email protected]<mailto:[email protected]>
www.clickatell.com<https://www.clickatell.com>
[cid:[email protected]]
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