tried, remove it from windows build, will need portable codes elsewhere
parent
5a34892fe2
commit
18324c72c2
|
@ -152,6 +152,9 @@ set(GD_PROGRAMS gdcmpgif)
|
||||||
|
|
||||||
if (PNG_FOUND)
|
if (PNG_FOUND)
|
||||||
set(GD_PROGRAMS ${GD_PROGRAMS} gdtopng pngtogd webpng)
|
set(GD_PROGRAMS ${GD_PROGRAMS} gdtopng pngtogd webpng)
|
||||||
|
if (WIN32 AND NOT MINGW AND NOT MSYS)
|
||||||
|
set(GD_PROGRAMS ${GD_PROGRAMS} webpng)
|
||||||
|
endif (WIN32 AND NOT MINGW AND NOT MSYS)
|
||||||
if (ZLIB_FOUND)
|
if (ZLIB_FOUND)
|
||||||
set(GD_PROGRAMS ${GD_PROGRAMS} gdparttopng gd2topng pngtogd2)
|
set(GD_PROGRAMS ${GD_PROGRAMS} gdparttopng gd2topng pngtogd2)
|
||||||
endif()
|
endif()
|
||||||
|
|
89
src/webpng.c
89
src/webpng.c
|
@ -41,95 +41,6 @@ static void usage(const char *msg)
|
||||||
fprintf(stderr, "\nError: %s\n", msg);
|
fprintf(stderr, "\nError: %s\n", msg);
|
||||||
exit(msg == NULL ? 0 : 1);
|
exit(msg == NULL ? 0 : 1);
|
||||||
}
|
}
|
||||||
static const char letters[] =
|
|
||||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
extern int optind, opterr, optopt;
|
|
||||||
extern char *optarg;
|
|
||||||
/* This is only used here */
|
|
||||||
int
|
|
||||||
mkstemp (char *tmpl)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
char *XXXXXX;
|
|
||||||
static unsigned long long value;
|
|
||||||
unsigned long long random_time_bits;
|
|
||||||
unsigned int count;
|
|
||||||
int fd = -1;
|
|
||||||
int save_errno = errno;
|
|
||||||
|
|
||||||
#define ATTEMPTS_MIN (62 * 62 * 62)
|
|
||||||
|
|
||||||
/* The number of times to attempt to generate a temporary file. To
|
|
||||||
conform to POSIX, this must be no smaller than TMP_MAX. */
|
|
||||||
#if ATTEMPTS_MIN < TMP_MAX
|
|
||||||
unsigned int attempts = TMP_MAX;
|
|
||||||
#else
|
|
||||||
unsigned int attempts = ATTEMPTS_MIN;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
len = strlen (tmpl);
|
|
||||||
if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
|
|
||||||
{
|
|
||||||
errno = EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is where the Xs start. */
|
|
||||||
XXXXXX = &tmpl[len - 6];
|
|
||||||
|
|
||||||
/* Get some more or less random data. */
|
|
||||||
{
|
|
||||||
SYSTEMTIME stNow;
|
|
||||||
FILETIME ftNow;
|
|
||||||
|
|
||||||
// get system time
|
|
||||||
GetSystemTime(&stNow);
|
|
||||||
stNow.wMilliseconds = 500;
|
|
||||||
if (!SystemTimeToFileTime(&stNow, &ftNow))
|
|
||||||
{
|
|
||||||
errno = -1;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
random_time_bits = (((unsigned long long)ftNow.dwHighDateTime << 32)
|
|
||||||
| (unsigned long long)ftNow.dwLowDateTime);
|
|
||||||
}
|
|
||||||
value += random_time_bits ^ (unsigned long long)GetCurrentThreadId ();
|
|
||||||
|
|
||||||
for (count = 0; count < attempts; value += 7777, ++count)
|
|
||||||
{
|
|
||||||
unsigned long long v = value;
|
|
||||||
|
|
||||||
/* Fill in the random bits. */
|
|
||||||
XXXXXX[0] = letters[v % 62];
|
|
||||||
v /= 62;
|
|
||||||
XXXXXX[1] = letters[v % 62];
|
|
||||||
v /= 62;
|
|
||||||
XXXXXX[2] = letters[v % 62];
|
|
||||||
v /= 62;
|
|
||||||
XXXXXX[3] = letters[v % 62];
|
|
||||||
v /= 62;
|
|
||||||
XXXXXX[4] = letters[v % 62];
|
|
||||||
v /= 62;
|
|
||||||
XXXXXX[5] = letters[v % 62];
|
|
||||||
|
|
||||||
fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
|
|
||||||
if (fd >= 0)
|
|
||||||
{
|
|
||||||
errno = save_errno;
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
else if (errno != EEXIST)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We got out of the loop because we ran out of combinations to try. */
|
|
||||||
errno = EEXIST;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void err(const char *fmt, ...)
|
static void err(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue