Line data Source code
1 : /*
2 : Copyright (c) 2007, Adobe Systems, Incorporated
3 : All rights reserved.
4 :
5 : Redistribution and use in source and binary forms, with or without
6 : modification, are permitted provided that the following conditions are
7 : met:
8 :
9 : * Redistributions of source code must retain the above copyright
10 : notice, this list of conditions and the following disclaimer.
11 :
12 : * Redistributions in binary form must reproduce the above copyright
13 : notice, this list of conditions and the following disclaimer in the
14 : documentation and/or other materials provided with the distribution.
15 :
16 : * Neither the name of Adobe Systems, Network Resonance nor the names of its
17 : contributors may be used to endorse or promote products derived from
18 : this software without specific prior written permission.
19 :
20 : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 : "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 : LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 : A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 : OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 : SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 : LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 : DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 : THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 : (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 : OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 : */
32 :
33 : #include <stdarg.h>
34 :
35 :
36 : static char *RCSSTRING __UNUSED__="$Id: ice_util.c,v 1.2 2008/04/28 17:59:05 ekr Exp $";
37 :
38 : #include <stdarg.h>
39 : #include <string.h>
40 : #include "nr_api.h"
41 : #include "ice_util.h"
42 :
43 0 : int nr_concat_strings(char **outp,...)
44 : {
45 : va_list ap;
46 0 : char *s,*out=0;
47 0 : int len=0;
48 : int _status;
49 :
50 0 : va_start(ap,outp);
51 0 : while(s=va_arg(ap,char *)){
52 0 : len+=strlen(s);
53 : }
54 0 : va_end(ap);
55 :
56 :
57 0 : if(!(out=RMALLOC(len+1)))
58 0 : ABORT(R_NO_MEMORY);
59 :
60 0 : *outp=out;
61 :
62 0 : va_start(ap,outp);
63 0 : while(s=va_arg(ap,char *)){
64 0 : len=strlen(s);
65 0 : memcpy(out,s,len);
66 0 : out+=len;
67 : }
68 0 : va_end(ap);
69 :
70 0 : *out=0;
71 :
72 0 : _status=0;
73 : abort:
74 0 : return(_status);
75 : }
76 :
|