r_mkdir: don't truncate the path on error (#322)
currently, in case of error, r_mkdir will leave the path at a truncated
state.
a7d39b0ab8
is the commit that introduced this change, and in it the
error printing is moved from r_mkdir to the caller, which makes me think
it was probably intentional.
make it so that the function itself prints the error/warning
message and returns the path back to the caller unharmed.
Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/322
Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org>
This commit is contained in:
parent
a67665a1c1
commit
9812d601c1
4
thumbs.c
4
thumbs.c
|
@ -92,10 +92,8 @@ static void tns_cache_write(Imlib_Image im, const char *filepath, bool force)
|
||||||
{
|
{
|
||||||
if ((dirend = strrchr(cfile, '/')) != NULL) {
|
if ((dirend = strrchr(cfile, '/')) != NULL) {
|
||||||
*dirend = '\0';
|
*dirend = '\0';
|
||||||
if (r_mkdir(cfile) == -1) {
|
if (r_mkdir(cfile) < 0)
|
||||||
error(0, errno, "%s", cfile);
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
|
||||||
*dirend = '/';
|
*dirend = '/';
|
||||||
}
|
}
|
||||||
imlib_context_set_image(im);
|
imlib_context_set_image(im);
|
||||||
|
|
14
util.c
14
util.c
|
@ -193,10 +193,11 @@ char* r_readdir(r_dir_t *rdir, bool skip_dotfiles)
|
||||||
|
|
||||||
int r_mkdir(char *path)
|
int r_mkdir(char *path)
|
||||||
{
|
{
|
||||||
|
int rc = 0;
|
||||||
char c, *s = path;
|
char c, *s = path;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
while (*s != '\0') {
|
while (*s != '\0' && rc == 0) {
|
||||||
if (*s == '/') {
|
if (*s == '/') {
|
||||||
s++;
|
s++;
|
||||||
continue;
|
continue;
|
||||||
|
@ -204,12 +205,15 @@ int r_mkdir(char *path)
|
||||||
for (; *s != '\0' && *s != '/'; s++);
|
for (; *s != '\0' && *s != '/'; s++);
|
||||||
c = *s;
|
c = *s;
|
||||||
*s = '\0';
|
*s = '\0';
|
||||||
if (mkdir(path, 0755) == -1)
|
if (mkdir(path, 0755) == -1) {
|
||||||
if (errno != EEXIST || stat(path, &st) == -1 || !S_ISDIR(st.st_mode))
|
if (errno != EEXIST || stat(path, &st) == -1 || !S_ISDIR(st.st_mode)) {
|
||||||
return -1;
|
error(0, errno, "%s", path);
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
*s = c;
|
*s = c;
|
||||||
}
|
}
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void construct_argv(char **argv, unsigned int len, ...)
|
void construct_argv(char **argv, unsigned int len, ...)
|
||||||
|
|
Loading…
Reference in a new issue