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

« back to all changes in this revision

Viewing changes to lib/ts/Layout.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:
1
1
/** @file
2
2
 
3
 
  A brief file description
 
3
  Implementation of the Layout class.
4
4
 
5
5
  @section license License
6
6
 
46
46
static char *
47
47
layout_relative(const char *root, const char *file)
48
48
{
49
 
  char path[PATH_MAX];
 
49
  char path[PATH_NAME_MAX];
50
50
 
51
 
  if (ink_filepath_merge(path, PATH_MAX, root, file,
52
 
                         INK_FILEPATH_TRUENAME)) {
 
51
  if (ink_filepath_merge(path, PATH_NAME_MAX, root, file, INK_FILEPATH_TRUENAME)) {
53
52
    int err = errno;
54
53
    // Log error
55
54
    if (err == EACCES) {
56
55
      ink_error("Cannot merge path '%s' above the root '%s'\n", file, root);
57
56
    } else if (err == E2BIG) {
58
 
      ink_error("Excedding file name length limit of %d characters\n", PATH_MAX);
 
57
      ink_error("Exceeding file name length limit of %d characters\n", PATH_NAME_MAX);
59
58
    }
60
59
    else {
61
60
      // TODO: Make some pretty errors.
63
62
    }
64
63
    return NULL;
65
64
  }
66
 
  return xstrdup(path);
 
65
  return ats_strdup(path);
67
66
}
68
67
 
69
68
char *
75
74
void
76
75
Layout::relative(char *buf, size_t bufsz, const char *file)
77
76
{
78
 
  char path[PATH_MAX];
 
77
  char path[PATH_NAME_MAX];
79
78
 
80
 
  if (ink_filepath_merge(path, PATH_MAX, prefix, file,
 
79
  if (ink_filepath_merge(path, PATH_NAME_MAX, prefix, file,
81
80
      INK_FILEPATH_TRUENAME)) {
82
81
    int err = errno;
83
82
    // Log error
84
83
    if (err == EACCES) {
85
84
      ink_error("Cannot merge path '%s' above the root '%s'\n", file, prefix);
86
85
    } else if (err == E2BIG) {
87
 
      ink_error("Excedding file name length limit of %d characters\n", PATH_MAX);
 
86
      ink_error("Exceeding file name length limit of %d characters\n", PATH_NAME_MAX);
88
87
    }
89
88
    else {
90
89
      // TODO: Make some pretty errors.
94
93
  }
95
94
  size_t path_len = strlen(path) + 1;
96
95
  if (path_len > bufsz) {
97
 
    ink_error("Provided buffer is too small: %d, required %d\n",
98
 
              bufsz, path_len);
 
96
    ink_error("Provided buffer is too small: %zu, required %zu\n", bufsz, path_len);
99
97
  }
100
98
  else {
101
 
    strcpy(buf, path);
 
99
    ink_strlcpy(buf, path, bufsz);
102
100
  }
103
101
}
104
102
 
111
109
void
112
110
Layout::relative_to(char *buf, size_t bufsz, const char *dir, const char *file)
113
111
{
114
 
  char path[PATH_MAX];
 
112
  char path[PATH_NAME_MAX];
115
113
 
116
 
  if (ink_filepath_merge(path, PATH_MAX, dir, file,
117
 
      INK_FILEPATH_TRUENAME)) {
 
114
  if (ink_filepath_merge(path, PATH_NAME_MAX, dir, file, INK_FILEPATH_TRUENAME)) {
118
115
    int err = errno;
119
116
    // Log error
120
117
    if (err == EACCES) {
121
118
      ink_error("Cannot merge path '%s' above the root '%s'\n", file, dir);
122
119
    } else if (err == E2BIG) {
123
 
      ink_error("Excedding file name length limit of %d characters\n", PATH_MAX);
 
120
      ink_error("Exceeding file name length limit of %d characters\n", PATH_NAME_MAX);
124
121
    }
125
122
    else {
126
123
      // TODO: Make some pretty errors.
130
127
  }
131
128
  size_t path_len = strlen(path) + 1;
132
129
  if (path_len > bufsz) {
133
 
    ink_error("Provided buffer is too small: %d, required %d\n",
134
 
              bufsz, path_len);
 
130
    ink_error("Provided buffer is too small: %zu, required %zu\n", bufsz, path_len);
135
131
  }
136
132
  else {
137
 
    strcpy(buf, path);
 
133
    ink_strlcpy(buf, path, bufsz);
138
134
  }
139
135
}
140
136
 
141
137
Layout::Layout(const char *_prefix)
142
138
{
143
139
  if (_prefix) {
144
 
    prefix = xstrdup(_prefix);
 
140
    prefix = ats_strdup(_prefix);
145
141
  } else {
146
142
    char *env_path;
147
 
    char path[PATH_MAX];
 
143
    char path[PATH_NAME_MAX];
148
144
    int  len;
149
145
 
150
146
    if ((env_path = getenv("TS_ROOT"))) {
151
147
      len = strlen(env_path);
152
 
      if ((len + 1) > PATH_MAX) {
153
 
        ink_error("TS_ROOT environment variable is too big: %d, max %d\n",
154
 
                  len, PATH_MAX -1);
 
148
      if ((len + 1) > PATH_NAME_MAX) {
 
149
        ink_error("TS_ROOT environment variable is too big: %d, max %d\n", len, PATH_NAME_MAX -1);
155
150
        return;
156
151
      }
157
 
      strcpy(path, env_path);
 
152
      ink_strlcpy(path, env_path, sizeof(path));
158
153
      while (len > 1 && path[len - 1] == '/') {
159
154
        path[len - 1] = '\0';
160
155
        --len;
161
156
      }
162
157
    } else {
163
158
        // Use compile time --prefix
164
 
      ink_strncpy(path, TS_BUILD_PREFIX, sizeof(path));
 
159
      ink_strlcpy(path, TS_BUILD_PREFIX, sizeof(path));
165
160
    }
166
161
 
167
162
    if (access(path, R_OK) == -1) {
168
 
      ink_error("unable to access() TS_ROOT '%s': %d, %s\n",
169
 
                path, errno, strerror(errno));
 
163
      ink_error("unable to access() TS_ROOT '%s': %d, %s\n", path, errno, strerror(errno));
170
164
      return;
171
165
    }
172
 
    prefix = xstrdup(path);
 
166
    prefix = ats_strdup(path);
173
167
  }
174
168
  exec_prefix = layout_relative(prefix, TS_BUILD_EXEC_PREFIX);
175
169
  bindir = layout_relative(prefix, TS_BUILD_BINDIR);
214
208
 
215
209
Layout::~Layout()
216
210
{
217
 
#define SafeFree(x) \
218
 
  if (x) xfree(x);
219
 
 
220
 
  SafeFree(prefix);
221
 
  SafeFree(exec_prefix);
222
 
  SafeFree(bindir);
223
 
  SafeFree(sbindir);
224
 
  SafeFree(sysconfdir);
225
 
  SafeFree(datadir);
226
 
  SafeFree(includedir);
227
 
  SafeFree(libdir);
228
 
  SafeFree(libexecdir);
229
 
  SafeFree(localstatedir);
230
 
  SafeFree(runtimedir);
231
 
  SafeFree(logdir);
232
 
  SafeFree(mandir);
233
 
  SafeFree(infodir);
234
 
  SafeFree(cachedir);
 
211
  ats_free(prefix);
 
212
  ats_free(exec_prefix);
 
213
  ats_free(bindir);
 
214
  ats_free(sbindir);
 
215
  ats_free(sysconfdir);
 
216
  ats_free(datadir);
 
217
  ats_free(includedir);
 
218
  ats_free(libdir);
 
219
  ats_free(libexecdir);
 
220
  ats_free(localstatedir);
 
221
  ats_free(runtimedir);
 
222
  ats_free(logdir);
 
223
  ats_free(mandir);
 
224
  ats_free(infodir);
 
225
  ats_free(cachedir);
235
226
}
236
227