- /* And we concatenate it with the part after this string */
- snprintf(absolute_path, PATH_MAX, "%s%s", start_path, next + 2);
+ /* Cut the part we will be trying to resolve */
+ cut_path = strndup(path, next - path);
+
+ /* Try to resolve this part */
+ try_path = realpath((char *)cut_path, NULL);
+ if (try_path == NULL) {
+ /*
+ * There was an error, we just want to be assured it
+ * is linked to an unexistent directory, if it's another
+ * reason, we spawn an error
+ */
+ switch (errno) {
+ case ENOENT:
+ /* Ignore the error */
+ break;
+ default:
+ PERROR("realpath (partial_realpath)");
+ goto error;
+ break;
+ }
+ } else {
+ /* Save the place we are before trying the next step */
+ free(try_path_prev);
+ try_path_prev = try_path;
+ prev = next;
+ }