mkdir exportdir's parent, if necessary
Tux Paint's export features will fail if the parent of the export directory didn't exist. e.g., using the default (either via XDG or hard-coded fallback) of "~/Pictures/TuxPaint/", Tux Paint could not export if "~/Pictures/" didn't exist yet. It will now try to mkdir it as well. h/t Tim Dickson Updated OPTIONS documents to explain this. Also, documenting --exportdir in manpage (was missing!)
This commit is contained in:
parent
c2a4b9862a
commit
c97932606f
9 changed files with 74 additions and 20 deletions
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
get_fname.c
|
||||
|
||||
Copyright (c) 2009 - 2020
|
||||
Copyright (c) 2009 - 2021
|
||||
http://www.tuxpaint.org/
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -57,6 +57,11 @@
|
|||
and easily-accessible place for end users to retrieve the exports.
|
||||
|
||||
The defaults may be overridden with the "--exportdir" option.
|
||||
|
||||
* DIR_EXPORT_PARENT: The parent of the directory
|
||||
specified by DIR_EXPORT. (e.g., if /home/username/Pictures/TuxPaint/
|
||||
is our export dir., we may need to make .../Pictures first,
|
||||
the first time we export something.)
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -88,7 +93,7 @@ char *get_fname(const char *const name, int kind)
|
|||
dir = savedir;
|
||||
} else if (kind == DIR_DATA) {
|
||||
dir = datadir;
|
||||
} else if (kind == DIR_EXPORT) {
|
||||
} else if (kind == DIR_EXPORT || kind == DIR_EXPORT_PARENT) {
|
||||
dir = exportdir;
|
||||
}
|
||||
|
||||
|
|
@ -97,6 +102,20 @@ char *get_fname(const char *const name, int kind)
|
|||
dir, (*name) ? '/' : '\0', /* Some mkdir()'s don't like trailing slashes */
|
||||
name);
|
||||
|
||||
if (kind == DIR_EXPORT_PARENT) {
|
||||
int len, i, stop;
|
||||
|
||||
stop = -1;
|
||||
len = strlen(f);
|
||||
for (i = len - 1; i >= 0 && stop == -1; i--) {
|
||||
if (f[i] == '/')
|
||||
stop = i;
|
||||
}
|
||||
if (stop != -1) {
|
||||
f[stop] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return strdup(f);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
get_fname.h
|
||||
|
||||
Copyright (c) 2009 - July 25, 2020
|
||||
Copyright (c) 2009 - January 13, 2021
|
||||
http://www.tuxpaint.org/
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -34,7 +34,8 @@ enum
|
|||
/* (See get_fname.c for details) */
|
||||
DIR_SAVE,
|
||||
DIR_DATA,
|
||||
DIR_EXPORT
|
||||
DIR_EXPORT,
|
||||
DIR_EXPORT_PARENT
|
||||
};
|
||||
|
||||
char *get_fname(const char *const name, int kind);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
.\" tuxpaint.1 - 2020.12.27
|
||||
.TH TUXPAINT 1 "27 December 2020" "0.9.26" "Tux Paint"
|
||||
.\" tuxpaint.1 - 2021.01.13
|
||||
.TH TUXPAINT 1 "13 January 2021" "0.9.26" "Tux Paint"
|
||||
.SH NAME
|
||||
tuxpaint -- "Tux Paint", a drawing program for young children.
|
||||
|
||||
|
|
@ -131,6 +131,8 @@ tuxpaint -- "Tux Paint", a drawing program for young children.
|
|||
.br
|
||||
[\-\-savedir \fIDIR\fP]
|
||||
.br
|
||||
[\-\-exportdir \fIDIR\fP]
|
||||
.br
|
||||
[\-\-datadir \fIDIR\fP]
|
||||
.br
|
||||
[\-\-saveover]
|
||||
|
|
@ -484,7 +486,11 @@ Use the \fIalllocalefonts\fP option to load all such fonts, for use in the
|
|||
|
||||
.TP 8
|
||||
.B \-\-savedir \fIDIR\fP
|
||||
Specify where \fITux Paint\fP should save files.
|
||||
Specify where \fITux Paint\fP should save and load its drawings.
|
||||
|
||||
.TP 8
|
||||
.B \-\-exportdir \fIDIR\fP
|
||||
Specify where \fITux Paint\fP should export drawings and animations.
|
||||
|
||||
.TP 8
|
||||
.B \-\-datadir \fIDIR\fP
|
||||
|
|
|
|||
|
|
@ -25963,9 +25963,16 @@ static char * get_export_filepath(const char * ext) {
|
|||
|
||||
|
||||
/* Make sure the export dir exists */
|
||||
if (!make_directory(DIR_EXPORT, "", "Can't create export directory (E016)"))
|
||||
if (!make_directory(DIR_EXPORT, "", "Can't create export directory; will try to make its parent (E016)"))
|
||||
{
|
||||
return NULL;
|
||||
/* See if perhaps we need to try and make its parent directory first? */
|
||||
if (make_directory(DIR_EXPORT_PARENT, "", "Can't create export directory parent (E016b)")) {
|
||||
if (!make_directory(DIR_EXPORT, "", "Can't create export directory (E016c)")) {
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Create a unique filename, within that dir */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue