~ubuntu-branches/ubuntu/wily/trafficserver/wily

« back to all changes in this revision

Viewing changes to mgmt/api/CfgContextManager.cc

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2012-12-17 22:28:16 UTC
  • mfrom: (5.1.8 raring-proposed)
  • Revision ID: package-import@ubuntu.com-20121217222816-7xwjsx5k76zkb63d
Tags: 3.2.0-1ubuntu1
* Revert FreeBSD strerror_r() fixes that give errors with glibc 2.16.
* Apply patch from Konstantinos Margaritis to define barriers on ARM.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 *
33
33
 ***************************************************************************/
34
34
#include "ink_platform.h"
 
35
#include "ink_string.h"
35
36
#include "CfgContextManager.h"
36
37
#include "CfgContextUtils.h"
37
38
#include "CoreAPI.h"
99
100
  if (!ctx)
100
101
    return TS_ERR_PARAMS;
101
102
 
102
 
  new_text = (char *) xmalloc(max_file_size + 1);
 
103
  new_text = (char *)ats_malloc(max_file_size + 1);
103
104
  new_text[0] = '\0';
104
105
  ele = ctx->first();
105
106
  index = 0;
107
108
    rule = ele->formatEleToRule();      // use polymorphism
108
109
    if (!rule) {
109
110
      err = TS_ERR_INVALID_CONFIG_RULE;
110
 
      rule = xstrdup(FORMAT_TO_RULE_ERROR);
 
111
      rule = ats_strdup(FORMAT_TO_RULE_ERROR);
111
112
      if (errRules) {
112
 
        iPtr = (int *) xmalloc(sizeof(int));
 
113
        iPtr = (int *)ats_malloc(sizeof(int));
113
114
        *iPtr = index;
114
115
        enqueue(errRules, (void *) iPtr);
115
116
      }
119
120
    size += len + 1;
120
121
    if (size > max_file_size) {
121
122
      max_file_size *= 2;
122
 
      new_text = (char *) xrealloc(new_text, max_file_size + 1);
123
 
      if (!new_text) {          // out of memory
124
 
        return TS_ERR_FAIL;
125
 
      }
 
123
      new_text = (char *)ats_realloc(new_text, max_file_size + 1);
126
124
    }
127
 
    strncat(new_text, rule, len);
128
 
    strncat(new_text, "\n", 1);
 
125
    ink_strlcat(new_text, rule, max_file_size + 1);
 
126
    ink_strlcat(new_text, "\n", max_file_size + 1);
129
127
 
130
 
    if (rule)
131
 
      xfree(rule);
 
128
    ats_free(rule);
132
129
    if (ele->getRuleType() != TS_TYPE_COMMENT)
133
130
      index++;
134
131
    ele = ctx->next(ele);
137
134
  // commit new file
138
135
  ver = ctx->getVersion();
139
136
  ret = WriteFile(ctx->getFilename(), new_text, size, ver);
140
 
  xfree(new_text);
 
137
  ats_free(new_text);
141
138
  if (ret != TS_ERR_OKAY)
142
139
    return TS_ERR_FAIL;        // couldn't write file
143
140
 
169
166
  // get copy of the file
170
167
  ret = ReadFile(ctx->getFilename(), &old_text, &size, &ver);
171
168
  if (ret != TS_ERR_OKAY) {
 
169
    // TODO: Hmmm, this looks almost like a memory leak, why the strcmp ??
172
170
    if (old_text && strcmp(old_text, "") != 0)
173
 
      xfree(old_text);          // need to free memory
 
171
      ats_free(old_text);          // need to free memory
174
172
    return ret;                 // Pass the error code along
175
173
  }
176
174
  // store version number
189
187
 
190
188
    ret = ctx->addEle(ele);
191
189
    if (ret != TS_ERR_OKAY) {
192
 
      if (old_text)
193
 
        xfree(old_text);        // need to free memory
 
190
      ats_free(old_text);        // need to free memory
194
191
      return ret;
195
192
    }
196
193
  }
197
194
  delete(rule_list);            // free RuleList memory
 
195
  // TODO: Hmmm, this looks almost like a memory leak, why the strcmp ??
198
196
  if (old_text && strcmp(old_text, "") != 0)
199
 
    xfree(old_text);            // need to free memory
 
197
    ats_free(old_text);            // need to free memory
200
198
  return TS_ERR_OKAY;
201
199
}
202
200