1*0797b24eSAndroid Build Coastguard Worker /*
2*0797b24eSAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project
3*0797b24eSAndroid Build Coastguard Worker *
4*0797b24eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*0797b24eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*0797b24eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*0797b24eSAndroid Build Coastguard Worker *
8*0797b24eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*0797b24eSAndroid Build Coastguard Worker *
10*0797b24eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*0797b24eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*0797b24eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*0797b24eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*0797b24eSAndroid Build Coastguard Worker * limitations under the License.
15*0797b24eSAndroid Build Coastguard Worker */
16*0797b24eSAndroid Build Coastguard Worker
17*0797b24eSAndroid Build Coastguard Worker #include "ExpandableString.h"
18*0797b24eSAndroid Build Coastguard Worker
19*0797b24eSAndroid Build Coastguard Worker #include <stdio.h>
20*0797b24eSAndroid Build Coastguard Worker #include <stdlib.h>
21*0797b24eSAndroid Build Coastguard Worker #include <string.h>
22*0797b24eSAndroid Build Coastguard Worker
ExpandableStringInitialize(struct ExpandableString * s)23*0797b24eSAndroid Build Coastguard Worker void ExpandableStringInitialize(struct ExpandableString *s) {
24*0797b24eSAndroid Build Coastguard Worker memset(s, 0, sizeof(*s));
25*0797b24eSAndroid Build Coastguard Worker }
26*0797b24eSAndroid Build Coastguard Worker
ExpandableStringRelease(struct ExpandableString * s)27*0797b24eSAndroid Build Coastguard Worker void ExpandableStringRelease(struct ExpandableString* s) {
28*0797b24eSAndroid Build Coastguard Worker free(s->data);
29*0797b24eSAndroid Build Coastguard Worker memset(s, 0, sizeof(*s));
30*0797b24eSAndroid Build Coastguard Worker }
31*0797b24eSAndroid Build Coastguard Worker
ExpandableStringAppend(struct ExpandableString * s,const char * text)32*0797b24eSAndroid Build Coastguard Worker bool ExpandableStringAppend(struct ExpandableString* s, const char* text) {
33*0797b24eSAndroid Build Coastguard Worker size_t textSize = strlen(text);
34*0797b24eSAndroid Build Coastguard Worker size_t requiredSize = s->dataSize + textSize + 1;
35*0797b24eSAndroid Build Coastguard Worker char* data = (char*) realloc(s->data, requiredSize);
36*0797b24eSAndroid Build Coastguard Worker if (data == NULL) {
37*0797b24eSAndroid Build Coastguard Worker return false;
38*0797b24eSAndroid Build Coastguard Worker }
39*0797b24eSAndroid Build Coastguard Worker s->data = data;
40*0797b24eSAndroid Build Coastguard Worker memcpy(s->data + s->dataSize, text, textSize + 1);
41*0797b24eSAndroid Build Coastguard Worker s->dataSize += textSize;
42*0797b24eSAndroid Build Coastguard Worker return true;
43*0797b24eSAndroid Build Coastguard Worker }
44*0797b24eSAndroid Build Coastguard Worker
ExpandableStringAssign(struct ExpandableString * s,const char * text)45*0797b24eSAndroid Build Coastguard Worker bool ExpandableStringAssign(struct ExpandableString* s, const char* text) {
46*0797b24eSAndroid Build Coastguard Worker ExpandableStringRelease(s);
47*0797b24eSAndroid Build Coastguard Worker return ExpandableStringAppend(s, text);
48*0797b24eSAndroid Build Coastguard Worker }