[jcifs] patch for midlc

Francis Upton francisu at ieee.org
Mon May 5 06:04:33 GMT 2008


Here is a patch that fixes some problems encountered while trying to 
compile a subset of the netlogon.idl file.

This is based on the lasted source I found, which is 0.6.1.

main ~/d/http/midlc-0.6.1> diff -wNaur  origsrc/ src
diff -wNaur origsrc/emit_dec_java.c src/emit_dec_java.c
--- origsrc/emit_dec_java.c     2008-05-01 11:06:13.000000000 -0700
+++ src/emit_dec_java.c 2008-05-01 12:13:17.000000000 -0700
@@ -114,8 +114,8 @@
                        if (!is_ref) {
                                print(idl, indent, "if (_%sp != 0) {\n", 
name);
                                if (!IS_PRIMATIVE(sym) && !IS_ARRAY(sym) 
&& !IS_UNION(sym)) {
-                                       print(idl, indent + 4, "if (%s 
== null) { /* YOYOYO */\n", name);
-                                       print(idl, indent + 8, "%s = new 
%s();\n", name, sym->out_type);
+                                       print(idl, indent + 4, "if (%s 
== null) { /* YOYOYO */\n", sym->name);
+                                       print(idl, indent + 8, "%s = new 
%s();\n", sym->name, sym->out_type);
                                        print(idl, indent + 4, "}\n");
                                }
                        }
diff -wNaur origsrc/emit_enc_java.c src/emit_enc_java.c
--- origsrc/emit_enc_java.c     2008-05-01 11:06:13.000000000 -0700
+++ src/emit_enc_java.c 2008-05-01 12:13:43.000000000 -0700
@@ -76,7 +76,7 @@
                                linkedlist_iterate(siblings, &iter);
                                while ((mem = linkedlist_next(siblings, 
&iter))) {
                                        if (strcmp(mem->name, tmp) == 0) {
-                                               if 
(memcmp(mem->out_type, "Ndr", 3) == 0) {
+                                               if (mem->out_type != 
NULL && memcmp(mem->out_type, "Ndr", 3) == 0) {
                                                        bp += 
sprintf(bp, ".value");
                                                }
                                                break;
@@ -151,7 +151,15 @@
 
                        buf[0] = '\0';
                        if (strcmp(sym->name, sym->orig->name) != 0) {
-                               sprintf(buf, "%s.", sym->parent->name);
+                               sprintf(buf, "%s.", sym->name);
+                               int i;
+                               // Remove the last component of the name
+                               for (i = strlen(buf) - 2; i >= 0; i--) {
+                                       if (buf[i] == '.') {
+                                               buf[i+1] = 0;
+                                               break;
+                                       }
+                               }
                        }
 
                        if (length_is) {
diff -wNaur origsrc/parse.c src/parse.c
--- origsrc/parse.c     2008-05-01 11:06:13.000000000 -0700
+++ src/parse.c 2008-05-01 09:50:45.000000000 -0700
@@ -39,7 +39,7 @@
        for ( ;; ) {
                if (!retok) {
                        if ((n = tokget(in, tok, tok + TOKMAX)) == -1) {
-                               AMSG("");
+                               AMSG("Unexpected end of file");
                                return -1;
                        } else if (n == 0) {
                                break;
@@ -75,8 +75,16 @@
                                        }
                                } else if (ch == '(') {
                                        int i;
+                                       // Count the open we already saw
+                                       int nestedOpen = 1;
 
-                                       for (i = 0; (ch = fgetc(in->in)) 
!= ')' && ch != EOF; i++) {
+                                       for (i = 0; (ch = fgetc(in->in)) 
!= EOF; i++) {
+                                               if (ch == '(') {
+                                                       nestedOpen++;
+                                               } else if (ch == ')') {
+                                                       if (--nestedOpen 
== 0)
+                                                               break;
+                                               }
                                                tok[i] = ch;
                                        }
                                        tok[i] = '\0';
@@ -117,11 +125,11 @@
                                                s->idl_type = "import";
                                                s->name = dupstr(tok, 
idl->al);
                                                s->noemit = 1;
-                                               symaddmem(sym->parent, s);
+                                               symaddmem(sym, s);
                                        }
 
                                        if (idl_process_file(idl, 
dupstr(buf, idl->al), &iface) == -1) {
-                                               AMSG("");
+                                               AMSG("Failed to process 
import file %s", sym->filename);
                                                return -1;
                                        }
                                }
@@ -291,7 +299,7 @@
                                        s->parent = sym;
                                        n = parse(idl, in, s);
                                        if (n == -1) {
-                                               AMSG("");
+                                               AMSG("Recursive parse 
failed");
                                                return -1;
                                        } else if (n == 0 || n == 3) {
                                                symdel(s);
@@ -305,7 +313,7 @@
 
                                                do {
                                                        if ((m = 
tokget(in, stok, stok + TOKMAX)) < 1) {
-                                                               AMSG("");
+                                                               
AMSG("Unexpected end of tokens");
                                                                return m;
                                                        }
                                                        sch = stok[0];




-- 
You have brains in your head.
You have feet in your shoes.
- Dr Seuss, Oh the Places You'll Go



More information about the jcifs mailing list