[ 
http://issues.apache.org/jira/browse/MODPYTHON-128?page=comments#action_12367490
 ] 

Graham Dumpleton commented on MODPYTHON-128:
--------------------------------------------

Here is link to discussion of similar change being ported from mod_perl 1 to 
mod_perl 2.

  http://www.gossamer-threads.com/lists/modperl/dev/8281

Their code was:

+static MP_INLINE
+char *mpxs_Apache__RequestRec_filename(pTHX_ request_rec *r, 
+                                             SV *name)
+{
+    char *retval = r->filename;
+
+    if (name) {
+        STRLEN len;
+        const char *val = SvPV(name, len);
+
+        MP_TRACE_o(MP_FUNC, "setting r->filename to %s\n", 
+                   val);
+
+        /* set r->filename to the incoming value */
+        r->filename = apr_pstrndup(r->pool, val, len);
+
+        /* and update r->finfo so later calcuations work properly */
+        apr_status_t rv = apr_stat(&r->finfo, r->filename, 
+                                   APR_FINFO_MIN, r->pool);
+
+        if (rv != APR_SUCCESS) {
+             MP_TRACE_o(MP_FUNC, "unable to update finfo for %s\n", 
+                        name);
+             r->finfo.filetype = 0;
+        }
+    }
+
+    return retval;
+}

Worth noting is that they set finfo.filetype to 0 if stat fails.

Consulting:

  http://docx.webperf.org/structapr__finfo__t.html
  http://docx.webperf.org/group__apr__file__info.html#gga3a66
  http://docx.webperf.org/apr__file__info_8h-source.html

rather than being assigned to zero, the constant APR_NOFILE should probably be 
used.

Is finfo.filetype being 0/APR_NOFILE truely indicative of data not being valid 
by itself?

Need to dig into apr_stat() further when have time.

> Have assigning req.filename automatically update req.finfo.
> -----------------------------------------------------------
>
>          Key: MODPYTHON-128
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-128
>      Project: mod_python
>         Type: Improvement
>   Components: core
>     Versions: 3.3
>     Reporter: Graham Dumpleton

>
> Although it is possible to assign a new value to "req.filename", it is not 
> possible to update "req.finfo" based on the new filename.
> Suggest that if "req.filename" is assigned a new value, that apr_stat() be 
> automatically called to update "req.finfo". Ie., internally mod_python would 
> do something like:
>   apr_stat(&r->finfo, r->filename, APR_FINFO_MIN, r->pool);
> I believe that mod_perl supports a similar feature, but would need to confirm 
> this.
> Related to "req.filename", the "req.canonical_filename" should also be 
> writable as when changing "req.filename" the latter should also by rights be 
> updated as well.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to