Previously uncontrolled files put into CVS.
[kopensolaris-gnu/glibc.git] / mach / shortcut.awk
index fa52eea..d6090d7 100644 (file)
@@ -1,9 +1,14 @@
 # Icky intimate knowledge of MiG output.
 
-BEGIN { args=""; argsnext=0; echo=1;
-       print "/* This file is generated by shortcut.awk.  */";
+BEGIN { print "/* This file is generated by shortcut.awk.  */";
+       echo=1;
+       inproto=0; proto=""; arglist="";
       }
 
+$1 == "LINTLIBRARY" { print "#include <mach.h>"; next }
+
+# Copy the first line of the definition, but
+# replace the function name (RPC) with CALL.
 $NF == rpc \
   {
     for (i = 1; i < NF; ++i) printf "%s ", $i;
@@ -11,25 +16,30 @@ $NF == rpc \
     next;
   }
 
-args == "" && $1 == "#else" { argsnext=1; print $0; next; }
-
-argsnext == 1 { args=$0; }
-
-{ argsnext=0; }
+# Collect the lines of the prototype in PROTO, and extract the parameter
+# names into ARGLIST.
+NF == 1 && $1 == ")" { inproto=0 }
+inproto { proto = proto $0;
+         arg = $NF;
+         gsub(/[^a-zA-Z0-9_,]/, "", arg);
+         arglist = arglist arg;
+       }
+NF == 1 && $1 == "(" { inproto=1 }
 
-/^{/ { echo=0; }
+/^{$/ { echo=0; }
 
 echo == 1 { print $0; }
 
-/^}/ \
+/^}$/ \
   {
     print "{";
     print "  kern_return_t err;";
-    print "  extern kern_return_t " syscall " ();";
-    print "  err = " syscall args ";";
+    print "  extern kern_return_t " syscall " (" proto ");";
+    print "  err = " syscall " (" arglist ");";
     print "  if (err == MACH_SEND_INTERRUPTED)";
-    print "    err = " rpc args ";";
+    print "    err = " rpc " (" arglist ");";
     print "  return err;"
     print "}";
+    print "weak_alias (" call ", " alias ")"
     echo = 1;
   }