svn commit: samba r4606 - in branches/SAMBA_4_0/source/build/pidl: .

tpot at samba.org tpot at samba.org
Sun Jan 9 02:03:59 GMT 2005


Author: tpot
Date: 2005-01-09 02:03:59 +0000 (Sun, 09 Jan 2005)
New Revision: 4606

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4606

Log:
Start adding some more comments and some indentation for the eparser
regexps.  Hopefully this will make things a bit easier to understand
later on.

Modified:
   branches/SAMBA_4_0/source/build/pidl/eparser.pm


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/eparser.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/eparser.pm	2005-01-09 01:14:26 UTC (rev 4605)
+++ branches/SAMBA_4_0/source/build/pidl/eparser.pm	2005-01-09 02:03:59 UTC (rev 4606)
@@ -419,85 +419,130 @@
 
     while(<IN>) {
 
-	# Ethereal take care of this for us.  It also makes the other
-	# regular expressions easier to write and understand. 
+	#
+        # Regexps to do a first pass at removing stuff we aren't
+	# interested in for ehtereal parsers.
+	#
 
+	# Remove the NDR_CHECK() macro calls.  Ethereal take care of
+	# this for us as part of the tvbuff_t structure.
+
 	s/NDR_CHECK\((.*)\)/$1/g;
 
-	# We're not interested in ndr_print, ndr_push or ndr_size functions.
+	# We're not interested in ndr_{print,push,size} functions so
+	# just delete them.
 
 	s/^(static )?NTSTATUS (ndr_push[^\(]+).*?^\}\n\n//smg;
 	s/^void (ndr_print[^\(]+).*?^\}\n\n//smg;
 	s/^size_t (ndr_size[^\(]+).*?^\}\n\n//smg;
 
-	# Get rid of dcerpc interface structures and functions
+	# Get rid of dcerpc interface structures and functions since
+	# they are also not very interesting.
 
 	s/^static const struct dcerpc_interface_call .*?^\};\n\n//smg;	
-	s/^static const char \* const ([a-z]+)_endpoint_strings.*?^\};\n\n//smg;
+	s/^static const char \* const 
+	    ([a-z]+)_endpoint_strings.*?^\};\n\n//smgx;
 	s/^static const struct dcerpc_endpoint_list .*?^\};\n\n\n//smg;	
 	s/^const struct dcerpc_interface_table .*?^\};\n\n//smg;	
 	s/^static NTSTATUS dcerpc_ndr_([a-z]+)_init.*?^\}\n\n//smg;	
 	s/^NTSTATUS dcerpc_([a-z]+)_init.*?^\}\n\n//smg;	
 
-	# Include packet-dcerpc-foo.h instead of ndr_foo.h
+	# Rewrite includes to packet-dcerpc-foo.h instead of ndr_foo.h
 
 	s/^\#include \".*?ndr_(.*?).h\"$/\#include \"packet-dcerpc-$1.h\"/smg;
 
-	# Call ethereal wrapper for ndr_pull_ptr() function.
+	#
+	# OK start wrapping the ndr_pull functions that actually
+	# implement the NDR decoding routines.  This mainly consists
+	# of adding a couple of parameters to each function call.
+        #
 
-	s/(ndr_pull_ptr\(ndr, ([^\)]*?)\);)/ndr_pull_ptr(ndr, tree, hf_ptr, $2);/smg;
+	# Add proto tree and hf argument to ndr_pull_ptr() calls.
 
-	# Wrap ndr_pull_array_size() - generate wrapper that won't get
-	# caught by the regex for wrapping scalar values below (i.e
-	# the leading space in front of the first parameter).
+	s/(ndr_pull_ptr\(ndr, ([^\)]*?)\);)/
+	    ndr_pull_ptr(ndr, tree, hf_ptr, $2);/smgx;
 
-	s/(ndr_pull_array_(size|length)\(ndr, ([^\)]*?)\);)/ndr_pull_array_$2( ndr, tree, $3);/smg;
+	# Wrap ndr_pull_array_size() and ndr_pull_array_length()
+	# functions.  Add leading space in front of first parameter so
+	# we won't get caught by later regexps.
 
-	# Add tree argument to ndr_pull_array()
+	s/(ndr_pull_array_(size|length)\(ndr, ([^\)]*?)\);)/
+	    ndr_pull_array_$2( ndr, tree, $3);/smgx;
 
-#get_subtree(tree, \"$2\", ndr, ett_$2)
-#ndr_pull_array( ndr, NDR_SCALARS, tree, (void **)r->aces, sizeof(r->aces[0]), r->num_aces, (ndr_pull_flags_fn_t)ndr_pull_security_ace);
-	s/(ndr_pull_array\(ndr, ([^,]*?), ([^,]*?), ([^\)].*?)\);)/ndr_pull_array( ndr, $2, tree, $3, $4);/smg;
+	# Add tree argument to ndr_pull_array() and
+	# ndr_pull_array_foo() calls.
 
-	s/(ndr_pull_array_([^\(]*?)\(ndr, ([^,]*?), (r->((in|out).)?([^,]*?)), (.*?)\);)/ndr_pull_array_$2( ndr, $3, tree, hf_$7_$2_array, $4, $8);/smg;
+	s/(ndr_pull_array\(
+	   ndr,
+	   ([^,]*?),                                # NDR_SCALARS etc
+	   (\(void \*\*\)r->(in|out|)\.?([^,]*?)),  # Pointer to array entries
+	   ([^\)].*?)\);)/                          # All other arguments
+	   ndr_pull_array( ndr, $2, tree, $3, $6);/smgx;
+
+	s/(ndr_pull_array_([^\(]*?)\(
+	   ndr, 
+	   ([^,]*?),                                # NDR_SCALARS etc
+	   (r->((in|out).)?([^,]*?)),               # Pointer to array elements
+	   (.*?)\);)/                               # Number of elements
+	   ndr_pull_array_$2( ndr, $3, tree, hf_$7_$2_array, $4, $8);/smgx;
  
-	# Save ndr_pull_relative[12]() calls from being wrapped by the
-	# proceeding regexp.
+	# Save ndr_pull_relative{1,2}() calls from being wrapped by the
+	# proceeding regexp by adding a leading space.
 
-	s/ndr_pull_(relative1|relative2)\((.*?);/ndr_pull_$1( $2;/smg;
+	s/ndr_pull_(relative1|relative2)\((.*?)\);/
+	    ndr_pull_$1( $2);/smgx;
 
 	# Call ethereal wrappers for pull of scalar values in
-	# structures and functions:
+	# structures and functions, e.g
 	#
 	# ndr_pull_uint32(ndr, &r->in.access_mask);
 	# ndr_pull_uint32(ndr, &r->idx);
 
-	s/(ndr_pull_([^\)]*?)\(ndr, (&?r->((in|out)\.)?([^\)]*?))\);)/ndr_pull_$2(ndr, tree, hf_$6_$2, $3);/smg;
+	s/(ndr_pull_([^\)]*?)\(
+	   ndr, 
+	   (&?r->((in|out)\.)?         # Function args contain leading junk
+	    ([^\)]*?))                 # Element name
+	   \);)/          
+	   ndr_pull_$2(ndr, tree, hf_$6_$2, $3);/smgx;
 
-	# Pull of "internal" scalars like array sizes, levels, etcetera.
+	# Add tree and hf argument to pulls of "internal" scalars like
+	# array sizes, levels, etc.
 
-	s/(ndr_pull_(uint32|uint16)\(ndr, (&_([^\)]*?))\);)/ndr_pull_$2(ndr, tree, hf_$4, $3);/smg;
+	s/(ndr_pull_(uint32|uint16)\(
+	   ndr,
+	   (&_([^\)]*?))        # Internal arg names have leading underscore
+	   \);)/
+	   ndr_pull_$2(ndr, tree, hf_$4, $3);/smgx;
 
-	# Call ethereal wrappers for pull of buffers in structures and
-	# functions:
+	# Add subtree argument to calls dissecting structures, e.g
 	#
 	# ndr_pull_string(ndr, NDR_SCALARS|NDR_BUFFERS, &r->command);
 	# ndr_pull_atsvc_enum_ctr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr);
 
-	s/(ndr_pull_([^\)]*?)\(ndr, (NDR_[^,]*?), ([^\(].*?)\);)/ndr_pull_$2(ndr, $3, get_subtree(tree, \"$2\", ndr, ett_$2), $4);/smg;
+	s/(ndr_pull_([^\)]*?)\(
+	   ndr, 
+	   (NDR_[^,]*?), 
+	   ([^\(].*?)\);)/
+	   ndr_pull_$2(ndr, $3, get_subtree(tree, \"$2\", ndr, ett_$2), $4);/smgx;
 
-	# Add proto_tree parameter to pull functions:
+	# Add proto_tree parameter to pull function prototypes, e.g
 	#
-	# static NTSTATUS ndr_pull_atsvc_JobInfo(struct ndr_pull *ndr, int ndr_flags, struct atsvc_JobInfo *r)
+	# static NTSTATUS ndr_pull_atsvc_JobInfo(struct ndr_pull *ndr, 
+	#         int ndr_flags, struct atsvc_JobInfo *r)
 
-	s/^((static )?NTSTATUS ndr_pull_([^\(]*?)\(struct ndr_pull \*ndr, int (ndr_)?flags)/$1, proto_tree \*tree/smg;
+	s/^((static )?NTSTATUS ndr_pull_([^\(]*?)\(
+	    struct ndr_pull \*ndr, 
+	    int (ndr_)?flags)/
+	    $1, proto_tree \*tree/smgx;
 
 	# Add proto_tree parameter to ndr_pull_subcontext_flags_fn()
 
         s/(ndr_pull_subcontext_flags_fn\(ndr)(.*?);/$1, tree$2;/smg;
 
-	# Get rid of ndr_pull_error() calls.  Ethereal should take
-	# care of buffer overruns and inconsistent array sizes for us.
+	# Get rid of ndr_pull_error() calls for the moment. Ethereal
+	# should take care of buffer overruns and inconsistent array
+	# sizes for us but it would be nice to have some error text in
+	# the dissection.
 
 	s/(return ndr_pull_error([^;]*?);)/return NT_STATUS_OK; \/\/ $1/smg;
 
@@ -512,19 +557,24 @@
 	# Fix some internal variable declarations
 
         s/uint(16|32) _level/uint$1_t _level/smg;
-        s/ndr_pull_([^\(]*)\(ndr, tree, hf_level, &_level\);/ndr_pull_$1(ndr, tree, hf_level_$1, &_level);/smg;
+        s/ndr_pull_([^\(]*)\(ndr, tree, hf_level, &_level\);/
+	    ndr_pull_$1(ndr, tree, hf_level_$1, &_level);/smgx;
 				
 	# Enums
 
-        s/(^static NTSTATUS ndr_pull_(.+?), (enum .+?)\))/static NTSTATUS ndr_pull_$2, pidl_tree *tree, int hf, $3)/smg;
+        s/(^static NTSTATUS ndr_pull_(.+?), (enum .+?)\))/
+	    static NTSTATUS ndr_pull_$2, pidl_tree *tree, int hf, $3)/smgx;
 	s/uint(8|16|32) v;/uint$1_t v;/smg;
-	s/(ndr_pull_([^\)]*?)\(ndr, &v\);)/ndr_pull_$2(ndr, tree, hf, &v);/smg;
+	s/(ndr_pull_([^\)]*?)\(ndr, &v\);)/
+	    ndr_pull_$2(ndr, tree, hf, &v);/smgx;
 
-	s/(ndr_pull_([^\(]+?)\(ndr, &_level\);)/ndr_pull_$2(ndr, tree, hf_$2, &_level);/smg;
+	s/(ndr_pull_([^\(]+?)\(ndr, &_level\);)/
+	    ndr_pull_$2(ndr, tree, hf_$2, &_level);/smgx;
 
 	# Bitmaps
 
-	s/(^NTSTATUS ndr_pull_(.+?), uint32 \*r\))/NTSTATUS ndr_pull_$2, pidl_tree *tree, int hf, uint32_t *r)/smg;
+	s/(^NTSTATUS ndr_pull_(.+?), uint32 \*r\))/
+	    NTSTATUS ndr_pull_$2, pidl_tree *tree, int hf, uint32_t *r)/smgx;
 
 	pidl $_;
     }



More information about the samba-cvs mailing list