plug-ins: better error message for file-compressor for specific issues.
This is a further improvement, for the specific case which appeared on issue #16160. Basically here for the specific case when we have permission issues, or other similar issues where we fail to either load the input image, or export to the temporary file, we would get more explicit error messages. And this would also show in the stderr output of the in-build-gimp.py script. In particular, when reproducing #16160 permission issue, the build logs now contain this error: GIMP-Error: Opening '/path/to/gimp/gimp-data/images/gimp-splash.xcf.xz' failed: Error creating temporary file '/tmp/gimp/3.2/gimp-temp-1719540.xcf': Permission denied This should better help diagnose similar issues in the future.
This commit is contained in:
parent
864abd6be0
commit
fd9484a8b8
1 changed files with 82 additions and 25 deletions
|
|
@ -108,10 +108,11 @@
|
|||
* that metric, I figure this plug-in is worth about $10,000 USD */
|
||||
/* But you got it free. Magic of Gnu. */
|
||||
|
||||
typedef gboolean (* LoadFn) (GFile *infile,
|
||||
GFile *outfile);
|
||||
typedef gboolean (* SaveFn) (GFile *infile,
|
||||
GFile *outfile);
|
||||
typedef gboolean (* LoadFn) (GFile *infile,
|
||||
GFile *outfile,
|
||||
GError **error);
|
||||
typedef gboolean (* SaveFn) (GFile *infile,
|
||||
GFile *outfile);
|
||||
|
||||
typedef struct _CompressorEntry CompressorEntry;
|
||||
|
||||
|
|
@ -194,22 +195,26 @@ static const gchar * find_extension (const CompressorEntry *comp
|
|||
const gchar *filename);
|
||||
|
||||
static gboolean gzip_load (GFile *infile,
|
||||
GFile *outfile);
|
||||
GFile *outfile,
|
||||
GError **error);
|
||||
static gboolean gzip_export (GFile *infile,
|
||||
GFile *outfile);
|
||||
|
||||
static gboolean bzip2_load (GFile *infile,
|
||||
GFile *outfile);
|
||||
GFile *outfile,
|
||||
GError **error);
|
||||
static gboolean bzip2_export (GFile *infile,
|
||||
GFile *outfile);
|
||||
|
||||
static gboolean xz_load (GFile *infile,
|
||||
GFile *outfile);
|
||||
GFile *outfile,
|
||||
GError **error);
|
||||
static gboolean xz_export (GFile *infile,
|
||||
GFile *outfile);
|
||||
|
||||
static gboolean zip_load (GFile *infile,
|
||||
GFile *outfile);
|
||||
GFile *outfile,
|
||||
GError **error);
|
||||
static goffset get_file_info (GFile *file);
|
||||
|
||||
|
||||
|
|
@ -540,7 +545,7 @@ load_image (const CompressorEntry *compressor,
|
|||
/* find a temp name */
|
||||
tmp_file = gimp_temp_file (ext + 1);
|
||||
|
||||
if (! compressor->load_fn (file, tmp_file))
|
||||
if (! compressor->load_fn (file, tmp_file, error))
|
||||
{
|
||||
g_object_unref (tmp_file);
|
||||
*status = GIMP_PDB_EXECUTION_ERROR;
|
||||
|
|
@ -631,8 +636,9 @@ find_extension (const CompressorEntry *compressor,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gzip_load (GFile *infile,
|
||||
GFile *outfile)
|
||||
gzip_load (GFile *infile,
|
||||
GFile *outfile,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret;
|
||||
int fd;
|
||||
|
|
@ -647,7 +653,13 @@ gzip_load (GFile *infile,
|
|||
|
||||
fd = g_open (g_file_peek_path (infile), O_RDONLY | _O_BINARY, 0);
|
||||
if (fd == -1)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error opening file '%s': %s",
|
||||
g_file_peek_path (infile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
in = gzdopen (fd, "rb");
|
||||
if (! in)
|
||||
|
|
@ -658,7 +670,13 @@ gzip_load (GFile *infile,
|
|||
|
||||
out = g_fopen (g_file_peek_path (outfile), "wb");
|
||||
if (! out)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error creating temporary file '%s': %s",
|
||||
g_file_peek_path (outfile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
|
|
@ -753,8 +771,9 @@ gzip_export (GFile *infile,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
bzip2_load (GFile *infile,
|
||||
GFile *outfile)
|
||||
bzip2_load (GFile *infile,
|
||||
GFile *outfile,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret;
|
||||
int fd;
|
||||
|
|
@ -769,7 +788,13 @@ bzip2_load (GFile *infile,
|
|||
|
||||
fd = g_open (g_file_peek_path (infile), O_RDONLY | _O_BINARY, 0);
|
||||
if (fd == -1)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error opening file '%s': %s",
|
||||
g_file_peek_path (infile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
in = BZ2_bzdopen (fd, "rb");
|
||||
if (!in)
|
||||
|
|
@ -780,7 +805,13 @@ bzip2_load (GFile *infile,
|
|||
|
||||
out = g_fopen (g_file_peek_path (outfile), "wb");
|
||||
if (!out)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error creating temporary file '%s': %s",
|
||||
g_file_peek_path (outfile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
|
|
@ -875,8 +906,9 @@ bzip2_export (GFile *infile,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
xz_load (GFile *infile,
|
||||
GFile *outfile)
|
||||
xz_load (GFile *infile,
|
||||
GFile *outfile,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret;
|
||||
FILE *in;
|
||||
|
|
@ -893,11 +925,23 @@ xz_load (GFile *infile,
|
|||
|
||||
in = g_fopen (g_file_peek_path (infile), "rb");
|
||||
if (!in)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error opening file '%s': %s",
|
||||
g_file_peek_path (infile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
out = g_fopen (g_file_peek_path (outfile), "wb");
|
||||
if (!out)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error creating temporary file '%s': %s",
|
||||
g_file_peek_path (outfile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (lzma_stream_decoder (&strm, UINT64_MAX, 0) != LZMA_OK)
|
||||
goto out;
|
||||
|
|
@ -1057,8 +1101,9 @@ xz_export (GFile *infile,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
zip_load (GFile *infile,
|
||||
GFile *outfile)
|
||||
zip_load (GFile *infile,
|
||||
GFile *outfile,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret;
|
||||
FILE *in;
|
||||
|
|
@ -1073,11 +1118,23 @@ zip_load (GFile *infile,
|
|||
|
||||
in = g_fopen (g_file_peek_path (infile), "rb");
|
||||
if (!in)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error opening file '%s': %s",
|
||||
g_file_peek_path (infile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
out = g_fopen (g_file_peek_path (outfile), "wb");
|
||||
if (! out)
|
||||
goto out;
|
||||
{
|
||||
g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Error creating temporary file '%s': %s",
|
||||
g_file_peek_path (outfile),
|
||||
g_strerror (errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ((a = archive_read_new ()))
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue