Re: gdk_pixbuf::xpm_image_save patch
- From: Tor Lillqvist <tml iki fi>
- To: gtk-devel-list gnome org
- Subject: Re: gdk_pixbuf::xpm_image_save patch
- Date: Mon, 30 Oct 2000 23:26:36 +0200 (FLE Standard Time)
> > - As far as mkstemp goes, I think the strategy I discussed with
> > Tor was to add a g_mkstemp function in glib.
Umm, yes:
/**
* g_mkstemp:
*
* Open a temporary file
*
* The parameter is a string that should match the rules for mktemp, i.e.
* end in "XXXXXX". The X string will be modified to form the name
* of a file that didn't exist.
*
* Return value: A file handle (as from open()) to the file file
* opened for reading and writing. The file is opened in binary mode
* on platforms where there is a difference. The file handle should be
* closed with close(). In case of errors, -1 is returned.
*
* From the GNU C library.
* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
*/
int
g_mkstemp (char *tmpl)
{
#ifdef HAVE_MKSTEMP
return mkstemp (tmpl);
#else
int len;
char *XXXXXX;
int count, fd;
static const char letters[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
glong value;
GTimeVal tv;
len = strlen (tmpl);
if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
return -1;
/* This is where the Xs start. */
XXXXXX = &tmpl[len - 6];
/* Get some more or less random data. */
g_get_current_time (&tv);
value = tv.tv_usec ^ tv.tv_sec;
for (count = 0; count < 100; value += 7777, ++count)
{
glong 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 | O_BINARY, 0600);
if (fd >= 0)
return fd;
else if (errno != EEXIST)
/* Any other error will apply also to other names we might
* try, and there are 2^32 or so of them, so give up now.
*/
return -1;
}
/* We got out of the loop because we ran out of combinations to try. */
return -1;
#endif
}
(Plus "#ifndef G_OS_WIN32 #define O_BINARY 0" earlier in the file.)
I'll add this to glib:gutils.c in a moment.
> >The GIMP's XPM plugin does handle saving. It does have the same
> >problem as mentioned above, but it at least gives the person
> >some more flexibility in using it.
> >So this should be a good option on win32. I'm pretty certain
> >that some of the other image manipulation suites such as
> >netpbm have been ported to Win32 or at least to djgpp
Except that the XPM plug-in isn't currently built on Windows, because
it uses libXpm, which uses libX11. Yes, I know that these can be built
on Windows without problems, and probably are available ready-built
somewhere. I've just been lazy.
Anyway, ImageMagick knows how to read and write Xpm. (It doesn't use
libXpm.)
--tml
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]