* to specify the size of the resolved_path argument if given, or the size to
* allocate.
*/
-LTTNG_HIDDEN
+static
char *utils_partial_realpath(const char *path, char *resolved_path, size_t size)
{
char *cut_path = NULL, *try_path = NULL, *try_path_prev = NULL;
* Copy the current token which is neither a '.' nor a '..'.
*/
path[expanded_path_len++] = '/';
- memcpy(&path[expanded_path_len], curr_char, curr_token_len);
+ memmove(&path[expanded_path_len], curr_char, curr_token_len);
expanded_path_len += curr_token_len;
}
/* Resolve partially our path */
absolute_path = utils_partial_realpath(absolute_path,
absolute_path, LTTNG_PATH_MAX);
+ if (!absolute_path) {
+ goto error;
+ }
}
ret = expand_double_slashes_dot_and_dotdot(absolute_path);
if (ret) {
PERROR("close pipe");
}
+ src[i] = -1;
}
}
char count_str[MAX_INT_DEC_LEN(count) + 1] = {};
const char *path_separator;
- if (path_name && path_name[strlen(path_name) - 1] == '/') {
+ if (path_name && (path_name[0] == '\0' ||
+ path_name[strlen(path_name) - 1] == '/')) {
path_separator = "";
} else {
path_separator = "/";
}
}
if (ret) {
- PERROR("Failed to get group file entry for group name \"%s\"",
- name);
+ if (ret == ESRCH) {
+ DBG("Could not find group file entry for group name '%s'",
+ name);
+ } else {
+ PERROR("Failed to get group file entry for group name '%s'",
+ name);
+ }
+
ret = -1;
goto error;
}