You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/02/13 17:21:35 UTC

svn commit: r1445705 - in /subversion/trunk/subversion/bindings/swig: include/svn_types.swg perl/libsvn_swig_perl/swigutil_pl.c perl/libsvn_swig_perl/swigutil_pl.h

Author: breser
Date: Wed Feb 13 16:21:35 2013
New Revision: 1445705

URL: http://svn.apache.org/r1445705
Log:
Cleaner solution to the problem fixed in r1445267.

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
  (svn_swig_pl_set_revision): Return a svn_opt_revision_t instead of using a
    pointer to a pointer.

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
  (svn_swig_pl_set_revision): Update declaration.

* subversion/bindings/swig/include/svn_types.swg
  (svn_opt_revision_t): Update typemap to match changes to
    svn_swig_pl_set_revision().

Patch by: Roderich Schupp <roderich.schupp{_AT_}gmail.com>


Modified:
    subversion/trunk/subversion/bindings/swig/include/svn_types.swg
    subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
    subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h

Modified: subversion/trunk/subversion/bindings/swig/include/svn_types.swg
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/include/svn_types.swg?rev=1445705&r1=1445704&r2=1445705&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/trunk/subversion/bindings/swig/include/svn_types.swg Wed Feb 13 16:21:35 2013
@@ -1169,8 +1169,7 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 */
 #ifdef SWIGPERL
 %typemap(in) svn_opt_revision_t * (svn_opt_revision_t rev) {
-    $1 = &rev;
-    svn_swig_pl_set_revision(&$1, $input);
+    $1 = svn_swig_pl_set_revision(&rev, $input);
 }
 #endif
 

Modified: subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1445705&r1=1445704&r2=1445705&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c (original)
+++ subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c Wed Feb 13 16:21:35 2013
@@ -315,30 +315,31 @@ SV *svn_swig_pl_revnums_to_list(const ap
 } 
 
 /* perl -> c svn_opt_revision_t conversion */
-void svn_swig_pl_set_revision(svn_opt_revision_t **rev, SV *source)
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source)
 {
     if (source == NULL || source == &PL_sv_undef || !SvOK(source)) {
-        (*rev)->kind = svn_opt_revision_unspecified;
+        rev->kind = svn_opt_revision_unspecified;
     }
     else if (sv_isobject(source) && sv_derived_from(source, "_p_svn_opt_revision_t")) {
-        SWIG_ConvertPtr(source, (void **)rev, _SWIG_TYPE("svn_opt_revision_t *"), 0);
+        /* this will assign to rev */
+        SWIG_ConvertPtr(source, (void **)&rev, _SWIG_TYPE("svn_opt_revision_t *"), 0);
     }
     else if (looks_like_number(source)) {
-        (*rev)->kind = svn_opt_revision_number;
-        (*rev)->value.number = SvIV(source);
+        rev->kind = svn_opt_revision_number;
+        rev->value.number = SvIV(source);
     }
     else if (SvPOK(source)) {
         char *input = SvPV_nolen(source);
         if (svn_cstring_casecmp(input, "BASE") == 0)
-            (*rev)->kind = svn_opt_revision_base;
+            rev->kind = svn_opt_revision_base;
         else if (svn_cstring_casecmp(input, "HEAD") == 0)
-            (*rev)->kind = svn_opt_revision_head;
+            rev->kind = svn_opt_revision_head;
         else if (svn_cstring_casecmp(input, "WORKING") == 0)
-            (*rev)->kind = svn_opt_revision_working;
+            rev->kind = svn_opt_revision_working;
         else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
-            (*rev)->kind = svn_opt_revision_committed;
+            rev->kind = svn_opt_revision_committed;
         else if (svn_cstring_casecmp(input, "PREV") == 0)
-            (*rev)->kind = svn_opt_revision_previous;
+            rev->kind = svn_opt_revision_previous;
         else if (*input == '{') {
             svn_boolean_t matched;
             apr_time_t tm;
@@ -360,8 +361,8 @@ void svn_swig_pl_set_revision(svn_opt_re
                 croak("unknown opt_revision_t string \"{%s}\": "
                       "svn_parse_date failed to parse it", input + 1);
 
-            (*rev)->kind = svn_opt_revision_date;
-            (*rev)->value.date = tm;
+            rev->kind = svn_opt_revision_date;
+            rev->value.date = tm;
         } else
             croak("unknown opt_revision_t string \"%s\": must be one of "
                   "\"BASE\", \"HEAD\", \"WORKING\", \"COMMITTED\", "
@@ -371,6 +372,8 @@ void svn_swig_pl_set_revision(svn_opt_re
               "a string (one of \"BASE\", \"HEAD\", \"WORKING\", "
               "\"COMMITTED\", \"PREV\" or a \"{DATE}\") "
               "or a _p_svn_opt_revision_t object");
+
+    return rev;
 }
 
 /* put the va_arg in stack and invoke caller_func with func.

Modified: subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h?rev=1445705&r1=1445704&r2=1445705&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h (original)
+++ subversion/trunk/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h Wed Feb 13 16:21:35 2013
@@ -106,7 +106,7 @@ SV *svn_swig_pl_convert_array(const apr_
 
 SV *svn_swig_pl_revnums_to_list(const apr_array_header_t *array);
 
-void svn_swig_pl_set_revision(svn_opt_revision_t **rev, SV *source);
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source);
 
 /* thunked log receiver function.  */
 svn_error_t * svn_swig_pl_thunk_log_receiver(void *py_receiver,