Re: Bug#677502: unblock: lv2file/0.83-1
On 14/06/12 13:10, Alessio Treglia wrote:
> I'd like to have some hints from you on how to fix the following issue:
>
> On Thu, Jun 14, 2012 at 1:47 PM, Steven Chamberlain <steven@pyro.eu.org> wrote:
>> The issue with lilv looks fixable but could be a swig bug so it could
>> take a while. A search for a file called 'lilv' in its include paths
>> results in opening the '../lilv' directory on non-Linux, and junk is
>> read from it.
Hi,
I came up with the attached fix for swig2.0, to skip reading from
"../lilv" if it is a directory (for which BSD allows fopen()).
But then the error only becomes different; I assume my fix worked as
intended but there was some other problem? Why was it looking for a
file called "lilv" with no extension anyway?
> [ 2/26] swig: bindings/lilv.i -> build/bindings/lilv.swigwrap_6.cxx build/bindings/lilv.py
> :6: Error: Unable to find 'lilv'
Also attached a ktrace excerpt showing the search routine.
Regards,
--
Steven Chamberlain
steven@pyro.eu.org
Index: swig2.0-2.0.7/Source/Swig/include.c
===================================================================
--- swig2.0-2.0.7.orig/Source/Swig/include.c 2012-03-18 04:58:08.000000000 +0000
+++ swig2.0-2.0.7/Source/Swig/include.c 2012-06-14 13:52:34.184623880 +0100
@@ -162,6 +162,7 @@
static FILE *Swig_open_file(const_String_or_char_ptr name, int sysfile, int use_include_path) {
FILE *f;
+ struct stat fs;
String *filename;
List *spath = 0;
char *cname;
@@ -185,8 +186,16 @@
Clear(filename);
Printf(filename, "%s%s", Getitem(spath, i), cname);
f = fopen(Char(filename), "r");
- if (f)
- break;
+ if (f) {
+ /* Ensure this is really a file (and not a directory, possible on
+ * some BSD-like systems) */
+ fstat(fileno(f), &fs);
+ if (S_ISDIR(fs.st_mode)) {
+ fclose(f);
+ } else {
+ break;
+ }
+ }
}
Delete(spath);
}
Index: swig2.0-2.0.7/Source/Swig/swig.h
===================================================================
--- swig2.0-2.0.7.orig/Source/Swig/swig.h 2012-03-17 18:40:38.000000000 +0000
+++ swig2.0-2.0.7/Source/Swig/swig.h 2012-06-14 13:24:55.911689099 +0100
@@ -22,6 +22,8 @@
#include <string.h>
#include <stdlib.h>
#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#ifdef __cplusplus
extern "C" {
41729 swig2.0 CALL open(0x8218840,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8218840,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "./lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8218840,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "../lilv"
41729 swig2.0 RET open 3
41729 swig2.0 CALL fstat(0x3,0xbfbfdc60)
41729 swig2.0 STRU struct stat {dev=2340379690, ino=69181, mode=drwxr-xr-x , nlink=2, uid=1000, gid=1000, rdev=4294967295, atime=1339673569.987719000, stime=1339678509.735623517, ctime=1339678509.735623517, birthtime=1339678509.735623517, size=5, blksize=131072, blocks=3, flags=0x0 }
41729 swig2.0 RET fstat 0
41729 swig2.0 CALL close(0x3)
41729 swig2.0 RET close 0
41729 swig2.0 CALL open(0x81e65a8,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/lilv"
41729 swig2.0 RET open 3
41729 swig2.0 CALL fstat(0x3,0xbfbfdc60)
41729 swig2.0 STRU struct stat {dev=2340379690, ino=69181, mode=drwxr-xr-x , nlink=2, uid=1000, gid=1000, rdev=4294967295, atime=1339673569.987719000, stime=1339678509.735623517, ctime=1339678509.735623517, birthtime=1339678509.735623517, size=5, blksize=131072, blocks=3, flags=0x0 }
41729 swig2.0 RET fstat 0
41729 swig2.0 CALL close(0x3)
41729 swig2.0 RET close 0
41729 swig2.0 CALL open(0x81e65a8,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/home/steven/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/build/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/lilv"
41729 swig2.0 RET open 3
41729 swig2.0 CALL fstat(0x3,0xbfbfdc60)
41729 swig2.0 STRU struct stat {dev=2340379690, ino=69181, mode=drwxr-xr-x , nlink=2, uid=1000, gid=1000, rdev=4294967295, atime=1339673569.987719000, stime=1339678509.735623517, ctime=1339678509.735623517, birthtime=1339678509.735623517, size=5, blksize=131072, blocks=3, flags=0x0 }
41729 swig2.0 RET fstat 0
41729 swig2.0 CALL close(0x3)
41729 swig2.0 RET close 0
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/usr/include/python2.7/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/usr/include/sord-0/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/usr/include/serd-0/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/usr/include/sratom-0/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/build/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "./swig_lib/python/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/usr/share/swig2.0/python/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "./swig_lib/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0)
41729 swig2.0 NAMI "/usr/share/swig2.0/lilv"
41729 swig2.0 RET open -1 errno 2 No such file or directory
41729 swig2.0 CALL write(0x2,0x2849672b,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
":"
41729 swig2.0 RET write 1
41729 swig2.0 CALL write(0x2,0xbfbfdb30,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
"6"
41729 swig2.0 RET write 1
41729 swig2.0 CALL write(0x2,0x2849672b,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
":"
41729 swig2.0 RET write 1
41729 swig2.0 CALL write(0x2,0x2849672b,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
" "
41729 swig2.0 RET write 1
41729 swig2.0 CALL write(0x2,0x2849672b,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
"E"
41729 swig2.0 RET write 1
41729 swig2.0 CALL write(0x2,0x2849672b,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
"r"
41729 swig2.0 RET write 1
41729 swig2.0 CALL write(0x2,0x2849672b,0x1)
41729 swig2.0 GIO fd 2 wrote 1 byte
"r"
Reply to: