Index: trunk/mkstructinfo.awk
===================================================================
--- trunk/mkstructinfo.awk	(revision 719)
+++ trunk/mkstructinfo.awk	(revision 837)
@@ -5,4 +5,9 @@
 	incomment = 0;
 	buffer_len = 0;
+}
+function printstruct(structname) {
+	printf "define(`ELEMENTSOF_%s', `%s')\n", structname, ELEMENTSOF[structname];
+	printf "define(`COUNTOF_%s', `%s')\n", structname, COUNTOF[structname];
+	printf "define(`SIZEOF_%s', `(  %s  )')\n", structname, SIZEOF[structname];
 }
 
@@ -35,9 +40,10 @@
 	if (instruct) {
 		sub(";", "");
-		if (instruct == 1 && $2) {
-			instruct = $2;
+		structname = instruct;
+		if (structname == 1 && $2) {
+			structname = $2;
 		}
-		if (instruct in typedefs) {
-			instruct = typedefs[instruct];
+		if (structname in typedefs) {
+			structname = typedefs[structname];
 		}
 		sizeinfo = "";
@@ -47,5 +53,5 @@
 				sizeinfo = sizeinfo " + ";
 			}
-			sizeinfo = sizeinfo "sizeof(((" instruct "*)NULL)->" buffer[i] ")";
+			sizeinfo = sizeinfo "sizeof(((" structname "*)NULL)->" buffer[i] ")";
 
 			if (i == 0) {
@@ -56,7 +62,8 @@
 			}
 		}
-		printf "define(`ELEMENTSOF_%s', `%s')\n", instruct, elms;
-		printf "define(`COUNTOF_%s', `%s')\n", instruct, i;
-		printf "define(`SIZEOF_%s', `(  %s  )')\n", instruct, sizeinfo;
+		ELEMENTSOF[structname] = elms;
+		COUNTOF[structname]    = i;
+		SIZEOF[structname]     = sizeinfo;
+		printstruct(structname);
 		print "\n";
 		for (i in buffer) {
@@ -149,5 +156,15 @@
 /^typedef struct [^{]*;/ {
 	sub(";", "");
-	typedefs[$3] = $4;
+	typename=$3;
+	newtypename=$4;
+	typedefs[typename] = newtypename;
+	if (ELEMENTSOF[typename]) {
+		ELEMENTSOF[newtypename] = ELEMENTSOF[typename];
+		COUNTOF[newtypename]    = COUNTOF[typename];
+		sub(/.*/, SIZEOF[typename]);
+		gsub(typename, newtypename);
+		SIZEOF[newtypename]     = $0;
+		printstruct(newtypename);
+	}
 	next;
 }
