Move all sources to subdirs
This commit is contained in:
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# 1) remove all extern non-xdr functions (service, client)
|
||||
# 2) use xdr_string_t for strings instead of char*
|
||||
# 3) remove K&R #ifdefs
|
||||
# 4) remove register int32_t* buf
|
||||
# 5) remove union names
|
||||
# 6) use xdr_string_t for opaques instead of u_int + char*
|
||||
# 7) TODO: generate normal procedure stubs
|
||||
run_rpcgen() {
|
||||
rpcgen -h $1.x | \
|
||||
perl -e '
|
||||
{ local $/ = undef; $_ = <>; }
|
||||
s/^extern(?!.*"C"|.*bool_t xdr.*XDR).*\n//gm;
|
||||
s/#include <rpc\/rpc.h>/#include "xdr_impl.h"/;
|
||||
s/^typedef char \*/typedef xdr_string_t /gm;
|
||||
s/^(\s*)char \*(?!.*_val)/$1xdr_string_t /gm;
|
||||
# remove union names
|
||||
s/ \w+_u;/;/gs;
|
||||
# use xdr_string_t for opaques
|
||||
s/struct\s*\{\s*u_int\s+\w+_len;\s*char\s+\*\w+_val;\s*\}\s*/xdr_string_t /gs;
|
||||
# remove stdc/k&r
|
||||
s/^#if.*__STDC__.*//gm;
|
||||
s/\n#else[^\n]*K&R.*?\n#endif[^\n]*K&R[^\n]*//gs;
|
||||
print;' > $1.h
|
||||
rpcgen -c $1.x | \
|
||||
perl -pe '
|
||||
s/register int32_t \*buf;\s*//g;
|
||||
s/\bbuf\s*=[^;]+;\s*//g;
|
||||
s/\bbuf\s*==\s*NULL/1/g;
|
||||
# remove union names
|
||||
s/(\.|->)\w+_u\./$1/g;
|
||||
# use xdr_string_t for opaques
|
||||
# xdr_bytes(xdrs, (char**)&objp->data.data_val, (char**)&objp->data.data_len, 400)
|
||||
# -> xdr_bytes(xdrs, &objp->data, 400)
|
||||
# xdr_bytes(xdrs, (char**)&objp->data_val, (char**)&objp->data_len, 400)
|
||||
# -> xdr_bytes(xdrs, objp, 400)
|
||||
s/xdr_bytes\s*\(\s*xdrs,\s*\(\s*char\s*\*\*\s*\)\s*([^()]+?)\.\w+_val\s*,\s*\(\s*u_int\s*\*\s*\)\s*\1\.\w+_len,/xdr_bytes(xdrs, $1,/gs;
|
||||
s/xdr_bytes\s*\(\s*xdrs,\s*\(\s*char\s*\*\*\s*\)\s*&\s*([^()]+?)->\w+_val\s*,\s*\(\s*u_int\s*\*\s*\)\s*&\s*\1->\w+_len,/xdr_bytes(xdrs, $1,/gs;
|
||||
# add include
|
||||
if (/#include/) { $_ .= "#include \"xdr_impl_inline.h\"\n"; }' > ${1}_xdr.cpp
|
||||
}
|
||||
|
||||
run_rpcgen nfs
|
||||
run_rpcgen rpc
|
||||
run_rpcgen portmap
|
||||
Reference in New Issue
Block a user