Currently there is no way to convert from apr_finfo_t to struct finfo. 

But, at least, here is a finfo patch that works.

Drawbacks for now is that it will resort to a stat() call each time
used, and can't be assigned to like you used to be able to do in 1.x
land (was this feature used at all?)

$Id: finfo.patch,v 1.2 2003/02/11 08:25:09 gozer Exp $

Index: STATUS
===================================================================
RCS file: /home/cvspublic/modperl-2.0/STATUS,v
retrieving revision 1.33
diff -u -I'$Id' -I'$Revision' -r1.33 STATUS
--- STATUS      15 Jan 2003 05:22:53 -0000      1.33
+++ STATUS      11 Feb 2003 08:13:18 -0000
@@ -165,6 +165,12 @@
 
 ----
 
+* r->finfo not backwards compatible
+  need apr_finfo_t <-> struct stat conversion which isn't there
+
+  Status: Posibly add this to APR
+
+----
 * 
   Report: 
   Status: 

Index: t/response/TestAPI/request_rec.pm
===================================================================
RCS file: /home/cvspublic/modperl-2.0/t/response/TestAPI/request_rec.pm,v
retrieving revision 1.15
diff -u -I'$Id' -I'$Revision' -r1.15 request_rec.pm
--- t/response/TestAPI/request_rec.pm   11 Apr 2002 11:08:43 -0000      1.15
+++ t/response/TestAPI/request_rec.pm   11 Feb 2003 08:13:20 -0000
@@ -11,6 +11,9 @@
 
 use Apache::Const -compile => 'OK';
 
+use File::stat ();
+use File::Spec qw(catfile);
+
 #this test module is only for testing fields in the request_rec
 #listed in apache_structures.map
 #XXX: GloabalRequest test should be moved elsewhere
@@ -19,7 +22,7 @@
 sub handler {
     my $r = shift;
 
-    plan $r, tests => 41;
+    plan $r, tests => 44;
 
     #Apache->request($r); #PerlOptions +GlobalRequest takes care
     my $gr = Apache->request;
@@ -128,7 +131,21 @@
 
     ok $r->args || 1;
 
-    #finfo
+    {
+        my $file = File::Spec->catfile(Apache::Test::config()->{vars}->{documentroot} 
+, 'index.html');
+        $r->filename($file);
+    
+        my $finfo = $r->finfo;
+
+        ok t_cmp ( \*_ , $finfo, 'finfo');
+
+        ok t_cmp ( [@{File::stat::stat($r->filename)}], 
+[@{File::stat::stat($finfo)}], 'finfo');
+
+        eval { $r->finfo(File::stat::stat($r->filename)) };
+    
+        ok ( $@ =~ /readonly/ );
+    }
+
     #parsed_uri
 
     #per_dir_config

Index: todo/api.txt
===================================================================
RCS file: /home/cvspublic/modperl-2.0/todo/api.txt,v
retrieving revision 1.31
diff -u -I'$Id' -I'$Revision' -r1.31 api.txt
--- todo/api.txt        22 Jan 2003 06:12:43 -0000      1.31
+++ todo/api.txt        11 Feb 2003 08:13:22 -0000
@@ -7,10 +7,6 @@
  -READLINE - proper implementation (see comment in Apache::compat)
  need to attempt to fix that interface so it'll work with IPC::Open* family  
 
-$r->finfo:
-need apr_finfo_t <-> struct stat conversion (might already be there,
-haven't looked close enough yet)
-
 $r->chdir_file:
 not safe for threaded environments.  should at least unshift @INC with
 dirname $r->filename.  consider overriding open() to resolve relative

Index: xs/Apache/RequestUtil/Apache__RequestUtil.h
===================================================================
RCS file: /home/cvspublic/modperl-2.0/xs/Apache/RequestUtil/Apache__RequestUtil.h,v
retrieving revision 1.17
diff -u -I'$Id' -I'$Revision' -r1.17 Apache__RequestUtil.h
--- xs/Apache/RequestUtil/Apache__RequestUtil.h 31 Jan 2003 04:20:20 -0000      1.17
+++ xs/Apache/RequestUtil/Apache__RequestUtil.h 11 Feb 2003 08:13:24 -0000
@@ -245,3 +245,24 @@
     return svh.sv;
 }
 
+static MP_INLINE
+SV *mpxs_Apache__RequestRec_finfo(pTHX_ request_rec *r, SV *statbuf)
+{
+    if (statbuf) {
+        Perl_die(aTHX_ "r->finfo is readonly!");
+        return Nullsv;       
+    }
+    
+    /* This is will cause an extraneous stat() call, since there is no
+     * conversion path from apr_finfo_t -> struct stat * */
+
+    PL_laststatval = 0;
+    sv_setpv(PL_statname, r->filename);
+    
+    if (GIMME_V != G_VOID) {
+        return newRV_noinc((SV*)gv_fetchpv("_", TRUE, SVt_PVIO));
+    }
+    else {
+        return Nullsv;   
+    }
+}

Index: xs/maps/modperl_functions.map
===================================================================
RCS file: /home/cvspublic/modperl-2.0/xs/maps/modperl_functions.map,v
retrieving revision 1.52
diff -u -I'$Id' -I'$Revision' -r1.52 modperl_functions.map
--- xs/maps/modperl_functions.map       29 Jan 2003 03:56:00 -0000      1.52
+++ xs/maps/modperl_functions.map       11 Feb 2003 08:13:26 -0000
@@ -19,6 +19,7 @@
  mpxs_Apache__RequestRec_get_handlers
  mpxs_Apache__RequestRec_location
  mpxs_Apache__RequestRec_as_string
+ mpxs_Apache__RequestRec_finfo | | r, statbuf=Nullsv
  mpxs_Apache__RequestRec_pnotes | | r, key=Nullsv, val=Nullsv
  modperl_config_insert_request | | \
   r, lines, path=r->filename, override=OR_AUTHCFG | add_config


--------------------------------------------------------------------------------
Philippe M. Chiasson /gozer\@(cpan|ectoplasm)\.org/ 88C3A5A5
(122FF51B/C634E37B)
http://gozer.ectoplasm.org/    F9BF E0C2 480E 7680 1AE5 3631 CB32 A107
88C3 A5A5
Q: It is impossible to make anything foolproof because fools are so
ingenious.
perl
-e'$$=\${gozer};{$_=unpack(P7,pack(L,$$));/^JAm_pH\n$/&&print||$$++&&redo}'

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to