scanimage: more generic fix for selecting a common basename function.

We have been specially including libgen.h to get a version in other
platforms such as macOS and FreeBSD. However, it is dangerous to
make assumptions about which version of basename that we will get.
So this change reverts to asking for the version that modifies the
argument and creates a copy of the arg that we *can* modify.
666-epsonds-has-issues-with-saned
Ralph Little 2023-02-13 12:32:35 -08:00
rodzic 971a5a2e92
commit 373dceaa36
1 zmienionych plików z 15 dodań i 9 usunięć

Wyświetl plik

@ -39,15 +39,7 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <stdarg.h> #include <stdarg.h>
#ifdef __FreeBSD__
#include <libgen.h>
#endif
#if defined (__APPLE__) && defined (__MACH__)
#include <libgen.h> // for basename() #include <libgen.h> // for basename()
#endif
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -1260,7 +1252,21 @@ write_png_header (SANE_Frame format, int width, int height, int depth, int dpi,
if ((is_gray_profile && color_type == PNG_COLOR_TYPE_GRAY) || if ((is_gray_profile && color_type == PNG_COLOR_TYPE_GRAY) ||
(is_rgb_profile && color_type == PNG_COLOR_TYPE_RGB)) (is_rgb_profile && color_type == PNG_COLOR_TYPE_RGB))
{ {
png_set_iCCP(*png_ptr, *info_ptr, basename(icc_profile), PNG_COMPRESSION_TYPE_BASE, icc_buffer, icc_size); char *icc_profile_cp = strdup(icc_profile);
if (icc_profile_cp == NULL)
{
fprintf(stderr, "Memory allocation failure prevented the setting of PNG ICC profile.\n");
}
else
{
png_set_iCCP (*png_ptr,
*info_ptr,
basename (icc_profile_cp),
PNG_COMPRESSION_TYPE_BASE,
icc_buffer,
icc_size);
free(icc_profile_cp);
}
} }
else else
{ {