Bugzilla – Bug 115394
SCR::Read( .target.stat, ...) and SCR::Read(.target.size, ...) fail on large files
Last modified: 2005-09-06 15:47:24 UTC
Hi, Apparently SCR::Read(.target.size, ... ) amd SCR::Read(.target.stat, ... ) fail if the pathname points to a file larger than 4 Gigabyte. This makes my check for existence of crypto files fail when the crypto file is large (se bugzilla #113322) Since .target.size and .target.stat are used in many places I consider this critical. The following small ycp file: { integer tmp = (integer)SCR::Read(.target.size, "/tmp/crfile"); y2milestone( "size=%1", tmp ); map stat = (map)SCR::Read(.target.stat, "/tmp/crfile"); y2milestone( "stat=%1", stat ); } logs the following if "/tmp/crfile" is larger than 4 Gigabyte: 2005-09-06 13:00:56 <1> Lagrange(10580) [YCP] ycp/emil18.ycp:3 size=-1 2005-09-06 13:00:56 <1> Lagrange(10580) [YCP] ycp/emil18.ycp:5 stat=$[] but works file if "/tmp/crfile" is smaller: 2005-09-06 13:11:49 <1> Lagrange(10622) [YCP] ycp/emil18.ycp:3 size=104857600 2005-09-06 13:11:49 <1> Lagrange(10622) [YCP] ycp/emil18.ycp:5 stat=$["atime":1126004551, "ctime":1126004551, "gid":0, "inode":17500, "isblock":false, "ischr":false, "isdir":false, "isfifo":false, "islink":false, "isreg":true, "issock":false, "mtime":1126004551, "nlink":1, "size":104857600, "uid":0]
I'll check
Hmm, SystemAgent uses the st_size property of 'struct stat' and converts it to a YCPInteger (which is implemented as 'long long')
Looks like we have to use 'struct stat64' here ...
This should fix it: Index: configure.in.in =================================================================== --- configure.in.in (revision 25391) +++ configure.in.in (working copy) @@ -2,6 +2,8 @@ ## initialize @YAST2-INIT-COMMON@ +AC_SYS_LARGEFILE + @YAST2-INIT-PROGRAM@ ## special stuff
submitted to svn, as yast2-core 2.12.24 will add a testcase later
adding AC_SYS_LARGEFILE might also be valid for yast2-devtools when creating configure.in
testcase added now. submitted as 2.12.25