Lesstif patches - lesstif stable has not been updated in a long time and these
are recognized patches (5 out of 6 are in Debian stable). Required for the arb package. svn path=/nixpkgs/trunk/; revision=12952
This commit is contained in:
parent
1587e34e0a
commit
cb546965bc
13
pkgs/development/libraries/lesstif/c-bad_integer_cast.patch
Normal file
13
pkgs/development/libraries/lesstif/c-bad_integer_cast.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- lesstif2-0.94.4.orig/include/Motif-2.1/XmI/XpmI.h
|
||||
+++ lesstif2-0.94.4/include/Motif-2.1/XmI/XpmI.h
|
||||
@@ -217,8 +217,8 @@
|
||||
FUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s));
|
||||
FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data));
|
||||
|
||||
-#define HashAtomData(i) ((void *)i)
|
||||
-#define HashColorIndex(slot) ((unsigned int)((*slot)->data))
|
||||
+#define HashAtomData(i) ((void *)(uintptr_t)i)
|
||||
+#define HashColorIndex(slot) ((uintptr_t)((*slot)->data))
|
||||
#define USE_HASHTABLE (cpp > 2 && ncolors > 4)
|
||||
|
||||
/* I/O utility */
|
11
pkgs/development/libraries/lesstif/c-missing_xm_h.patch
Normal file
11
pkgs/development/libraries/lesstif/c-missing_xm_h.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- lesstif2-0.94.4.orig/include/Motif-2.1/Xm/XmStrDefs.h
|
||||
+++ lesstif2-0.94.4/include/Motif-2.1/Xm/XmStrDefs.h
|
||||
@@ -28,6 +28,8 @@
|
||||
|
||||
#include <X11/StringDefs.h>
|
||||
|
||||
+#include <Xm/Xm.h>
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
@ -0,0 +1,11 @@
|
||||
--- lesstif2-0.95.0.orig/lib/Xm-2.1/RenderTable.c
|
||||
+++ lesstif2-0.95.0/lib/Xm-2.1/RenderTable.c
|
||||
@@ -465,7 +465,7 @@
|
||||
DEBUGOUT(_LtDebug(__FILE__, w, "_XmRenderTableFinaliseTag(%s)\n", tag));
|
||||
#if 1
|
||||
/* Experimental start */
|
||||
- if (r->dpy == 0)
|
||||
+ if (r->dpy == 0 && w)
|
||||
r->dpy = XtDisplay(w);
|
||||
/* Experimental end */
|
||||
#endif
|
38
pkgs/development/libraries/lesstif/c-unsigned_int.patch
Normal file
38
pkgs/development/libraries/lesstif/c-unsigned_int.patch
Normal file
@ -0,0 +1,38 @@
|
||||
--- lesstif2-0.94.4.orig/lib/Xm-2.1/Xpmcreate.c
|
||||
+++ lesstif2-0.94.4/lib/Xm-2.1/Xpmcreate.c
|
||||
@@ -1265,10 +1265,10 @@
|
||||
register char *src;
|
||||
register char *dst;
|
||||
register unsigned int *iptr;
|
||||
- register unsigned int x, y, i;
|
||||
+ register unsigned int x, y;
|
||||
register char *data;
|
||||
Pixel pixel, px;
|
||||
- int nbytes, depth, ibu, ibpp;
|
||||
+ int nbytes, depth, ibu, ibpp, i;
|
||||
|
||||
data = image->data;
|
||||
iptr = pixelindex;
|
||||
--- lesstif2-0.94.4.orig/lib/Xm-2.1/Xpmscan.c
|
||||
+++ lesstif2-0.94.4/lib/Xm-2.1/Xpmscan.c
|
||||
@@ -672,8 +672,8 @@
|
||||
char *dst;
|
||||
unsigned int *iptr;
|
||||
char *data;
|
||||
- unsigned int x, y, i;
|
||||
- int bits, depth, ibu, ibpp, offset;
|
||||
+ unsigned int x, y;
|
||||
+ int bits, depth, ibu, ibpp, offset, i;
|
||||
unsigned long lbt;
|
||||
Pixel pixel, px;
|
||||
|
||||
@@ -684,6 +684,9 @@
|
||||
ibpp = image->bits_per_pixel;
|
||||
offset = image->xoffset;
|
||||
|
||||
+ if (image->bitmap_unit < 0)
|
||||
+ return (XpmNoMemory);
|
||||
+
|
||||
if ((image->bits_per_pixel | image->depth) == 1) {
|
||||
ibu = image->bitmap_unit;
|
||||
for (y = 0; y < height; y++)
|
@ -0,0 +1,24 @@
|
||||
diff -ru lesstif2-0.94.4-old/lib/Xm-2.1/XmIm.c lesstif2-0.94.4/lib/Xm-2.1/XmIm.c
|
||||
--- lesstif2-0.94.4-old/lib/Xm-2.1/XmIm.c 2004-10-20 21:32:11.000000000 +0200
|
||||
+++ lesstif2-0.94.4/lib/Xm-2.1/XmIm.c 2007-03-28 14:39:27.000000000 +0200
|
||||
@@ -133,7 +133,10 @@
|
||||
p->next = q->next;
|
||||
}
|
||||
|
||||
- XtFree((char *)stuff);
|
||||
+ /* if count!=0 then someone uses the stuff as orig_xim
|
||||
+ so unlink it but not free it */
|
||||
+ if (!stuff->count)
|
||||
+ XtFree((char *)stuff);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1060,6 +1063,8 @@
|
||||
XCloseIM(stuff->xim);
|
||||
DEBUGOUT(_LtDebug(__FILE__, w, "XCloseIM(%p)\n", stuff->xim));
|
||||
stuff->orig_xim->xim = NULL;
|
||||
+ /* stuff->orig_xim is now useless */
|
||||
+ XtFree(stuff->orig_xim);
|
||||
} else {
|
||||
DEBUGOUT(_LtDebug(__FILE__, w, "XmImCloseXIM(%p), count -> %d\n",
|
||||
stuff->xim, stuff->orig_xim->count));
|
381
pkgs/development/libraries/lesstif/c-xpmpipethrough.patch
Normal file
381
pkgs/development/libraries/lesstif/c-xpmpipethrough.patch
Normal file
@ -0,0 +1,381 @@
|
||||
Index: lesstif2-0.95.0/lib/Xm-2.1/XpmRdFToI.c
|
||||
===================================================================
|
||||
--- lesstif2-0.95.0.orig/lib/Xm-2.1/XpmRdFToI.c 2004-11-18 22:00:58.000000000 +0100
|
||||
+++ lesstif2-0.95.0/lib/Xm-2.1/XpmRdFToI.c 2006-07-11 11:13:29.000000000 +0200
|
||||
@@ -44,11 +44,15 @@
|
||||
DebugUtil.h! */
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
+#include <errno.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
+#ifdef HAVE_SYS_WAIT_H
|
||||
+#include <sys/wait.h>
|
||||
+#endif
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
@@ -87,16 +91,6 @@
|
||||
strcpy(dst, src); \
|
||||
else return (XpmFileInvalid); }
|
||||
#endif
|
||||
-#include <sys/stat.h>
|
||||
-#if !defined(NO_ZPIPE) && defined(WIN32)
|
||||
-# define popen _popen
|
||||
-# define pclose _pclose
|
||||
-# if defined(STAT_ZFILE)
|
||||
-# include <io.h>
|
||||
-# define stat _stat
|
||||
-# define fstat _fstat
|
||||
-# endif
|
||||
-#endif
|
||||
|
||||
LFUNC(OpenReadFile, int, (char *filename, xpmData *mdata));
|
||||
LFUNC(xpmDataClose, void, (xpmData *mdata));
|
||||
@@ -173,90 +167,131 @@
|
||||
}
|
||||
#endif /* CXPMPROG */
|
||||
|
||||
-/*
|
||||
- * open the given file to be read as an xpmData which is returned.
|
||||
- */
|
||||
#ifndef NO_ZPIPE
|
||||
- FILE *s_popen(char *cmd, const char *type);
|
||||
-#else
|
||||
-# define s_popen popen
|
||||
+/* Do not depend on errno after read_through */
|
||||
+FILE*
|
||||
+xpmPipeThrough(fd, cmd, arg1, mode)
|
||||
+ int fd;
|
||||
+ const char* cmd;
|
||||
+ const char* arg1;
|
||||
+ const char* mode;
|
||||
+{
|
||||
+ FILE* fp;
|
||||
+ int status, fds[2], in = 0, out = 1;
|
||||
+ pid_t pid;
|
||||
+ if ( 'w' == *mode )
|
||||
+ out = 0, in = 1;
|
||||
+ if ( pipe(fds) < 0 )
|
||||
+ return NULL;
|
||||
+ pid = fork();
|
||||
+ if ( pid < 0 )
|
||||
+ goto fail1;
|
||||
+ if ( 0 == pid )
|
||||
+ {
|
||||
+ close(fds[in]);
|
||||
+ if ( dup2(fds[out], out) < 0 )
|
||||
+ goto err;
|
||||
+ close(fds[out]);
|
||||
+ if ( dup2(fd, in) < 0 )
|
||||
+ goto err;
|
||||
+ close(fd);
|
||||
+ pid = fork();
|
||||
+ if ( pid < 0 )
|
||||
+ goto err;
|
||||
+ if ( 0 == pid )
|
||||
+ {
|
||||
+ execlp(cmd, cmd, arg1, NULL);
|
||||
+ perror(cmd);
|
||||
+ goto err;
|
||||
+ }
|
||||
+ _exit(0);
|
||||
+ err:
|
||||
+ _exit(1);
|
||||
+ }
|
||||
+ close(fds[out]);
|
||||
+ /* calling process: wait for first child */
|
||||
+ while ( waitpid(pid, &status, 0) < 0 && EINTR == errno )
|
||||
+ ;
|
||||
+ if ( WIFSIGNALED(status) ||
|
||||
+ (WIFEXITED(status) && WEXITSTATUS(status) != 0) )
|
||||
+ goto fail2;
|
||||
+ fp = fdopen(fds[in], mode);
|
||||
+ if ( !fp )
|
||||
+ goto fail2;
|
||||
+ close(fd); /* still open in 2nd child */
|
||||
+ return fp;
|
||||
+fail1:
|
||||
+ close(fds[out]);
|
||||
+fail2:
|
||||
+ close(fds[in]);
|
||||
+ return NULL;
|
||||
+}
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * open the given file to be read as an xpmData which is returned.
|
||||
+ */
|
||||
static int
|
||||
OpenReadFile(filename, mdata)
|
||||
char *filename;
|
||||
xpmData *mdata;
|
||||
{
|
||||
-#ifndef NO_ZPIPE
|
||||
- char buf[BUFSIZ];
|
||||
-# ifdef STAT_ZFILE
|
||||
- char *compressfile;
|
||||
- struct stat status;
|
||||
-# endif
|
||||
-#endif
|
||||
-
|
||||
if (!filename) {
|
||||
mdata->stream.file = (stdin);
|
||||
mdata->type = XPMFILE;
|
||||
} else {
|
||||
-#ifndef NO_ZPIPE
|
||||
- size_t len = strlen(filename);
|
||||
-
|
||||
- if(len == 0 ||
|
||||
- filename[len-1] == '/')
|
||||
- return(XpmOpenFailed);
|
||||
- if ((len > 2) && !strcmp(".Z", filename + (len - 2))) {
|
||||
- mdata->type = XPMPIPE;
|
||||
- snprintf(buf, sizeof(buf), "uncompress -c \"%s\"", filename);
|
||||
- if (!(mdata->stream.file = s_popen(buf, "r")))
|
||||
- return (XpmOpenFailed);
|
||||
-
|
||||
- } else if ((len > 3) && !strcmp(".gz", filename + (len - 3))) {
|
||||
- mdata->type = XPMPIPE;
|
||||
- snprintf(buf, sizeof(buf), "gunzip -qc \"%s\"", filename);
|
||||
- if (!(mdata->stream.file = s_popen(buf, "r")))
|
||||
- return (XpmOpenFailed);
|
||||
-
|
||||
- } else {
|
||||
-# ifdef STAT_ZFILE
|
||||
- if (!(compressfile = (char *) XpmMalloc(len + 4)))
|
||||
+ int fd = open(filename, O_RDONLY);
|
||||
+#if defined(NO_ZPIPE)
|
||||
+ if ( fd < 0 )
|
||||
+ return XpmOpenFailed;
|
||||
+#else
|
||||
+ const char* ext = NULL;
|
||||
+ if ( fd >= 0 )
|
||||
+ ext = strrchr(filename, '.');
|
||||
+#ifdef STAT_ZFILE /* searching for z-files if the given name not found */
|
||||
+ else
|
||||
+ {
|
||||
+ size_t len = strlen(filename);
|
||||
+ char *compressfile = (char *) XpmMalloc(len + 4);
|
||||
+ if ( !compressfile )
|
||||
return (XpmNoMemory);
|
||||
-
|
||||
- snprintf(compressfile, len+4, "%s.Z", filename);
|
||||
- if (!stat(compressfile, &status)) {
|
||||
- snprintf(buf, sizeof(buf), "uncompress -c \"%s\"", compressfile);
|
||||
- if (!(mdata->stream.file = s_popen(buf, "r"))) {
|
||||
+ strcpy(compressfile, filename);
|
||||
+ strcpy(compressfile + len, ext = ".Z");
|
||||
+ fd = open(compressfile, O_RDONLY);
|
||||
+ if ( fd < 0 )
|
||||
+ {
|
||||
+ strcpy(compressfile + len, ext = ".gz");
|
||||
+ fd = open(compressfile, O_RDONLY);
|
||||
+ if ( fd < 0 )
|
||||
+ {
|
||||
XpmFree(compressfile);
|
||||
- return (XpmOpenFailed);
|
||||
- }
|
||||
- mdata->type = XPMPIPE;
|
||||
- } else {
|
||||
- snprintf(compressfile, len+4, "%s.gz", filename);
|
||||
- if (!stat(compressfile, &status)) {
|
||||
- snprintf(buf, sizeof(buf), "gunzip -c \"%s\"", compressfile);
|
||||
- if (!(mdata->stream.file = s_popen(buf, "r"))) {
|
||||
- XpmFree(compressfile);
|
||||
- return (XpmOpenFailed);
|
||||
- }
|
||||
- mdata->type = XPMPIPE;
|
||||
- } else {
|
||||
-# endif
|
||||
-#endif
|
||||
- if (!(mdata->stream.file = fopen(filename, "r"))) {
|
||||
-#if !defined(NO_ZPIPE) && defined(STAT_ZFILE)
|
||||
- XpmFree(compressfile);
|
||||
-#endif
|
||||
- return (XpmOpenFailed);
|
||||
- }
|
||||
- mdata->type = XPMFILE;
|
||||
-#ifndef NO_ZPIPE
|
||||
-# ifdef STAT_ZFILE
|
||||
+ return XpmOpenFailed;
|
||||
}
|
||||
}
|
||||
XpmFree(compressfile);
|
||||
-# endif
|
||||
}
|
||||
#endif
|
||||
+ if ( ext && !strcmp(ext, ".Z") )
|
||||
+ {
|
||||
+ mdata->type = XPMPIPE;
|
||||
+ mdata->stream.file = xpmPipeThrough(fd, "uncompress", "-c", "r");
|
||||
+ }
|
||||
+ else if ( ext && !strcmp(ext, ".gz") )
|
||||
+ {
|
||||
+ mdata->type = XPMPIPE;
|
||||
+ mdata->stream.file = xpmPipeThrough(fd, "gunzip", "-qc", "r");
|
||||
+ }
|
||||
+ else
|
||||
+#endif /* z-files */
|
||||
+ {
|
||||
+ mdata->type = XPMFILE;
|
||||
+ mdata->stream.file = fdopen(fd, "r");
|
||||
+ }
|
||||
+ if (!mdata->stream.file)
|
||||
+ {
|
||||
+ close(fd);
|
||||
+ return (XpmOpenFailed);
|
||||
+ }
|
||||
}
|
||||
mdata->CommentLength = 0;
|
||||
#ifdef CXPMPROG
|
||||
@@ -273,15 +308,6 @@
|
||||
xpmDataClose(mdata)
|
||||
xpmData *mdata;
|
||||
{
|
||||
- switch (mdata->type) {
|
||||
- case XPMFILE:
|
||||
- if (mdata->stream.file != (stdin))
|
||||
- fclose(mdata->stream.file);
|
||||
- break;
|
||||
-#ifndef NO_ZPIPE
|
||||
- case XPMPIPE:
|
||||
+ if (mdata->stream.file != (stdin))
|
||||
fclose(mdata->stream.file);
|
||||
- break;
|
||||
-#endif
|
||||
- }
|
||||
}
|
||||
Index: lesstif2-0.95.0/lib/Xm-2.1/XpmWrFFrI.c
|
||||
===================================================================
|
||||
--- lesstif2-0.95.0.orig/lib/Xm-2.1/XpmWrFFrI.c 2005-04-13 20:03:27.000000000 +0200
|
||||
+++ lesstif2-0.95.0/lib/Xm-2.1/XpmWrFFrI.c 2006-07-11 11:13:29.000000000 +0200
|
||||
@@ -50,11 +50,15 @@
|
||||
DebugUtil.h! */
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
+#include <errno.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
+#ifdef HAVE_SYS_WAIT_H
|
||||
+#include <sys/wait.h>
|
||||
+#endif
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
@@ -94,11 +98,6 @@
|
||||
else return (XpmFileInvalid); }
|
||||
#endif
|
||||
|
||||
-#if !defined(NO_ZPIPE) && defined(WIN32)
|
||||
-# define popen _popen
|
||||
-# define pclose _pclose
|
||||
-#endif
|
||||
-
|
||||
/* MS Windows define a function called WriteFile @#%#&!!! */
|
||||
LFUNC(xpmWriteFile, int, (FILE *file, XpmImage *image, char *name,
|
||||
XpmInfo *info));
|
||||
@@ -354,58 +353,48 @@
|
||||
fprintf(file, ",\n\"XPMENDEXT\"");
|
||||
}
|
||||
|
||||
+
|
||||
+#ifndef NO_ZPIPE
|
||||
+FUNC(xpmPipeThrough, FILE*, (int fd,
|
||||
+ const char* cmd,
|
||||
+ const char* arg1,
|
||||
+ const char* mode));
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* open the given file to be written as an xpmData which is returned
|
||||
*/
|
||||
-#ifndef NO_ZPIPE
|
||||
- FILE *s_popen(char *cmd, const char *type);
|
||||
-#else
|
||||
-# define s_popen popen
|
||||
-#endif
|
||||
static int
|
||||
OpenWriteFile(filename, mdata)
|
||||
char *filename;
|
||||
xpmData *mdata;
|
||||
{
|
||||
-#ifndef NO_ZPIPE
|
||||
- char buf[BUFSIZ];
|
||||
-
|
||||
-#endif
|
||||
-
|
||||
if (!filename) {
|
||||
mdata->stream.file = (stdout);
|
||||
mdata->type = XPMFILE;
|
||||
} else {
|
||||
#ifndef NO_ZPIPE
|
||||
- size_t len = strlen(filename);
|
||||
-
|
||||
- if(len == 0 ||
|
||||
- filename[0] == '/' ||
|
||||
- strstr(filename, "../") != NULL ||
|
||||
- filename[len-1] == '/')
|
||||
- return(XpmOpenFailed);
|
||||
-
|
||||
+ size_t len;
|
||||
+#endif
|
||||
+ int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||
+ if ( fd < 0 )
|
||||
+ return(XpmOpenFailed);
|
||||
+#ifndef NO_ZPIPE
|
||||
+ len = strlen(filename);
|
||||
if (len > 2 && !strcmp(".Z", filename + (len - 2))) {
|
||||
- snprintf(buf, sizeof(buf), "compress > \"%s\"", filename);
|
||||
- if (!(mdata->stream.file = s_popen(buf, "w")))
|
||||
- return (XpmOpenFailed);
|
||||
-
|
||||
+ mdata->stream.file = xpmPipeThrough(fd, "compress", NULL, "w");
|
||||
mdata->type = XPMPIPE;
|
||||
} else if (len > 3 && !strcmp(".gz", filename + (len - 3))) {
|
||||
- snprintf(buf, sizeof(buf), "gzip -q > \"%s\"", filename);
|
||||
- if (!(mdata->stream.file = s_popen(buf, "w")))
|
||||
- return (XpmOpenFailed);
|
||||
-
|
||||
+ mdata->stream.file = xpmPipeThrough(fd, "gzip", "-q", "w");
|
||||
mdata->type = XPMPIPE;
|
||||
- } else {
|
||||
+ } else
|
||||
#endif
|
||||
- if (!(mdata->stream.file = fopen(filename, "w")))
|
||||
- return (XpmOpenFailed);
|
||||
-
|
||||
+ {
|
||||
+ mdata->stream.file = fdopen(fd, "w");
|
||||
mdata->type = XPMFILE;
|
||||
-#ifndef NO_ZPIPE
|
||||
}
|
||||
-#endif
|
||||
+ if (!mdata->stream.file)
|
||||
+ return (XpmOpenFailed);
|
||||
}
|
||||
return (XpmSuccess);
|
||||
}
|
||||
@@ -417,15 +406,6 @@
|
||||
xpmDataClose(mdata)
|
||||
xpmData *mdata;
|
||||
{
|
||||
- switch (mdata->type) {
|
||||
- case XPMFILE:
|
||||
- if (mdata->stream.file != (stdout))
|
||||
- fclose(mdata->stream.file);
|
||||
- break;
|
||||
-#ifndef NO_ZPIPE
|
||||
- case XPMPIPE:
|
||||
+ if (mdata->stream.file != (stdout))
|
||||
fclose(mdata->stream.file);
|
||||
- break;
|
||||
-#endif
|
||||
- }
|
||||
}
|
@ -1,12 +1,26 @@
|
||||
{stdenv, fetchurl, x11, libXp, libXau}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "lesstif-0.95";
|
||||
name = "lesstif-0.95-p2";
|
||||
src = fetchurl {
|
||||
url = mirror://sourceforge/lesstif/lesstif-0.95.0.tar.bz2;
|
||||
md5 = "ab895165c149d7f95843c7584b1c7ad4";
|
||||
};
|
||||
buildInputs = [x11];
|
||||
propagatedBuildInputs = [libXp libXau];
|
||||
patches = [./c-linkage.patch];
|
||||
|
||||
# The last stable release of lesstif was in June 2006. These
|
||||
# patches fix a number of later issues - in particular the
|
||||
# render_table_crash shows up in 'arb'. The same patches appear
|
||||
# in Debian, so we assume they have been sent upstream.
|
||||
#
|
||||
patches = [
|
||||
./c-bad_integer_cast.patch
|
||||
./c-linkage.patch
|
||||
./c-unsigned_int.patch
|
||||
./c-missing_xm_h.patch
|
||||
./c-xim_chained_list_crash.patch
|
||||
./c-render_table_crash.patch
|
||||
./c-xpmpipethrough.patch
|
||||
];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user