[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: