char *start, *end;
start = td->path + strlen(td->collection_path);
- start++; /* skip / */
+ while (start[0] == '/')
+ start++; /* skip / */
end = strchr(start, '/');
if (!end)
- return;
+ end = start + strlen(start);
memcpy(td->domain, start, end - start);
td->domain[end - start] = '\0';
}
return;
memcpy(buf, td->path, PATH_MAX);
start = buf + strlen(td->collection_path);
- start++; /* skip / */
+ while (start[0] == '/')
+ start++; /* skip / */
start = strchr(start, '/'); /* get begin of domain content */
if (!start)
return;
- start++; /* skip / */
+ while (start[0] == '/')
+ start++; /* skip / */
/* find last -, skips time */
end = strrchr(start, '-');
if (!end)
return;
memcpy(buf, td->path, PATH_MAX);
start = buf + strlen(td->collection_path);
- start++; /* skip / */
+ while (start[0] == '/')
+ start++; /* skip / */
start = strchr(start, '/'); /* get begin of domain content */
if (!start)
return;
- start++; /* skip / */
+ while (start[0] == '/')
+ start++; /* skip / */
/* find last -, skips time */
end = strrchr(start, '-');
if (!end)
struct dirent *dirent;
struct dirent *diriter;
size_t dirent_len;
+ char *respath, *rescolpath;
td->flags = flags;
ret = -errno;
goto error_dirfd;
}
- strncpy(td->collection_path, collection_path, PATH_MAX);
- td->collection_path[PATH_MAX - 1] = '\0';
- strncpy(td->path, path, PATH_MAX);
- td->path[PATH_MAX - 1] = '\0';
+ rescolpath = realpath(collection_path, td->collection_path);
+ if (!rescolpath) {
+ fprintf(stdout, "[error] collection path resolution failure\n");
+ return -EINVAL;
+ }
+ respath = realpath(path, td->path);
+ if (!rescolpath) {
+ fprintf(stdout, "[error] path resolution failure\n");
+ return -EINVAL;
+ }
init_domain_name(td);
init_proc_name(td);
init_vpid(td);