Dan Hipschman : widl: Fix out-only temporary variable generation.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 16 06:16:03 CDT 2006


Module: wine
Branch: master
Commit: c526c980d7ac68e0918c278bfccc50e118fe3ea9
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=c526c980d7ac68e0918c278bfccc50e118fe3ea9

Author: Dan Hipschman <dsh at linux.ucla.edu>
Date:   Tue Aug 15 18:33:58 2006 -0700

widl: Fix out-only temporary variable generation.

---

 tools/widl/proxy.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/tools/widl/proxy.c b/tools/widl/proxy.c
index 4a4e080..f060a23 100644
--- a/tools/widl/proxy.c
+++ b/tools/widl/proxy.c
@@ -685,8 +685,10 @@ static void gen_proxy(type_t *iface, fun
 static void stub_write_locals( var_t *arg )
 {
   int n = 0;
+  END_OF_LIST(arg);
   while (arg) {
-    int outptr = is_attr(arg->attrs, ATTR_OUT);
+    int outptr = is_attr(arg->attrs, ATTR_OUT)
+                 && ! is_attr(arg->attrs, ATTR_IN);
 
     /* create a temporary variable to store the output */
     if (outptr) {
@@ -702,7 +704,7 @@ static void stub_write_locals( var_t *ar
     fprintf(proxy, " ");
     write_name(proxy, arg);
     fprintf(proxy, ";\n");
-    arg = NEXT_LINK(arg);
+    arg = PREV_LINK(arg);
   }
 }
 
@@ -731,7 +733,8 @@ static void stub_unmarshall( var_t *arg 
         print_proxy("");
         write_name(proxy, arg);
         fprintf(proxy," = &_M%d;\n", n);
-        print_proxy("_M%d = 0;\n", n++);
+        print_proxy("MIDL_memset(&_M%d, 0, sizeof _M%d);\n", n, n);
+        ++n;
         break;
       }
     }




More information about the wine-cvs mailing list