47
47
layout_relative(const char *root, const char *file)
49
char path[PATH_NAME_MAX];
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)) {
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);
61
60
// TODO: Make some pretty errors.
76
75
Layout::relative(char *buf, size_t bufsz, const char *file)
77
char path[PATH_NAME_MAX];
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)) {
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);
90
89
// TODO: Make some pretty errors.
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",
96
ink_error("Provided buffer is too small: %zu, required %zu\n", bufsz, path_len);
99
ink_strlcpy(buf, path, bufsz);
112
110
Layout::relative_to(char *buf, size_t bufsz, const char *dir, const char *file)
112
char path[PATH_NAME_MAX];
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)) {
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);
126
123
// TODO: Make some pretty errors.
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",
130
ink_error("Provided buffer is too small: %zu, required %zu\n", bufsz, path_len);
133
ink_strlcpy(buf, path, bufsz);
141
137
Layout::Layout(const char *_prefix)
144
prefix = xstrdup(_prefix);
140
prefix = ats_strdup(_prefix);
143
char path[PATH_NAME_MAX];
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",
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);
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';
163
158
// Use compile time --prefix
164
ink_strncpy(path, TS_BUILD_PREFIX, sizeof(path));
159
ink_strlcpy(path, TS_BUILD_PREFIX, sizeof(path));
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));
172
prefix = xstrdup(path);
166
prefix = ats_strdup(path);
174
168
exec_prefix = layout_relative(prefix, TS_BUILD_EXEC_PREFIX);
175
169
bindir = layout_relative(prefix, TS_BUILD_BINDIR);