the vluke program now takes a structure name on the command line
authorAndrew Tridgell <tridge@samba.org>
Tue, 16 May 2000 15:03:48 +0000 (15:03 +0000)
committerAndrew Tridgell <tridge@samba.org>
Tue, 16 May 2000 15:03:48 +0000 (15:03 +0000)
source/aparser/harness.awk
source/aparser/parsetree.awk
source/aparser/srvsvc.struct
source/aparser/templates/harness.tpl [new file with mode: 0644]
source/aparser/templates/harness_end.tpl [new file with mode: 0644]
source/aparser/vluke.c

index f63863d638545e76a0d4a6ba101eb4d674c50520..6c4c35c40f291607fa6fbc06bad9d2df009cc668 100644 (file)
@@ -7,16 +7,11 @@ function produce_harness(f,
 
        print_template(f, "harness_start.tpl", v);
 
-       for (i=0;i<num_tests;i++) {
-               v["TEST"] = tests[i];
+       for (i=0;i<num_structs;i++) {
+               v["TEST"] = structs[i, "name"];
                print_template(f, "harness.tpl", v);
        }
 
        print_template(f, "harness_end.tpl", v);
 }
 
-function add_test(test)
-{
-       tests[num_tests] = test;
-       num_tests++;
-}
index cd4e442c9b8a0d7dadb29ad6e5284f02b92333aa..e99793f516c1291a2b67ffaf41103e330ee45515 100644 (file)
@@ -20,6 +20,9 @@ function start_struct(name)
 
 function end_struct() 
 {
+       printf("struct %s with %d elements\n", 
+              structs[num_structs, "name"],
+              structs[num_structs, "num_elems"]);
        num_structs++;
        current_struct="";
 }
index f8dd94a2e696e8ed87216a2241a2e9d9abab14f4..3ba36836ad71e8b7c2afa34805fb16452d237a2c 100644 (file)
@@ -1,7 +1,4 @@
 module srvsvc
-test SRV_R_NET_SHARE_ENUM
-test SRV_R_NET_SERVER_INFO
-test SRV_Q_NET_SERVER_INFO
 
 #define SRV_NETCONNENUM        0x08
 #define SRV_NETFILEENUM        0x09
@@ -42,21 +39,78 @@ struct CONN_INFO_1 {
        LPWSTR net_name; 
 };
 
-struct SRV_R_NET_CONN_ENUM {
+struct CONN_ENUM_CTR {
        uint32 level;
-       uint32 level2;
        uint32 num_entries;
        union *info[level] {
                case 0 CONN_INFO_0 info0[num_entries]; 
                case 1 CONN_INFO_1 info1[num_entries]; 
        }
+};
+
+struct SRV_R_NET_CONN_ENUM {
         .trailer;
-        uint32 count;
+       uint32 level;
+       CONN_ENUM_CTR ctr;
         ENUM_HND handle;
-        uint32 status1;
+        uint32 num_entries;
+        uint32 status;
         uint32 status2;
 };
 
+struct SRV_Q_NET_CONN_ENUM {
+       .trailer;
+       LPWSTR dest_srv;
+       LPWSTR qual_srv;
+       uint32 level;
+       uint32 level2;
+       CONN_ENUM_CTR *ctr;
+       uint32 max_len;
+       ENUM_HND handle;
+};
+
+/* function 9 */
+struct FILE_INFO_3 {
+       uint32 id;            /* file index */
+       uint32 perms;         /* file permissions. don't know what format */
+       uint32 num_locks;     /* file locks */
+       LPWSTR path_name; /* file name */
+       LPWSTR user_name; /* file owner */
+};
+
+struct SRV_FILE_INFO_CTR {
+       uint32 level;
+       uint32 num_entries;
+       uint32 dummy;
+       union *file[level] {
+             case 3 FILE_INFO_3 info3[num_entries];
+       }
+};
+
+struct SRV_Q_NET_FILE_ENUM {
+       .trailer;
+       LPWSTR srv_name;
+       LPWSTR qual_name;
+       uint32 dummy;
+       uint32 level;
+       SRV_FILE_INFO_CTR ctr;
+       uint32 *status;
+       uint32 preferred_len;
+       ENUM_HND enum_hnd;
+};
+
+
+struct SRV_R_NET_FILE_ENUM {
+       .trailer;
+       uint32 level;
+       uint32 dummy;
+       SRV_FILE_INFO_CTR *ctr;
+       uint32 total_entries;                    /* total number of files */
+       ENUM_HND enum_hnd;
+       uint32 status;        /* return status */
+};
+
+
 /* function 15 */
 struct SRV_SHARE_INFO_1 {
        LPWSTR uni_netname;
diff --git a/source/aparser/templates/harness.tpl b/source/aparser/templates/harness.tpl
new file mode 100644 (file)
index 0000000..bd2355d
--- /dev/null
@@ -0,0 +1,5 @@
+
+       if (strcmp(test,"@TEST@")==0) {
+          @TEST@ il;
+          ret = io_@TEST@("@TEST@", ps, 0, &il, PARSE_SCALARS|PARSE_BUFFERS);
+       }
diff --git a/source/aparser/templates/harness_end.tpl b/source/aparser/templates/harness_end.tpl
new file mode 100644 (file)
index 0000000..191351b
--- /dev/null
@@ -0,0 +1,3 @@
+
+       return ret;
+}
index 5a64e06eb05818cbd57e181be495fea864ec6b13..7adc396f6d911943cdcd1a43ec900dfb64874f99 100644 (file)
@@ -30,11 +30,14 @@ int main(int argc, char *argv[])
        prs_init(&ps, 0, 4, MARSHALL);
        ps.is_dynamic=True;
        prs_read(&ps, fd, st.st_size, 0);
-       ps.data_offset = 0;
+       ps.data_offset = 0;     
+       ps.buffer_size = ps.grow_size;
        ps.io = UNMARSHALL;
        ret = run_test(test, &ps);
        printf("\nret=%s\n", ret?"OK":"Bad");
        printf("Trailer is %d bytes\n\n", ps.grow_size - ps.data_offset);
-       dump_data(0, ps.data_p, ps.grow_size);
+       if (ps.grow_size - ps.data_offset > 0) {
+               dump_data(0, ps.data_p + ps.data_offset, ps.grow_size - ps.data_offset);
+       }
        return !ret;
 }