XCache is a fast, stable PHP opcode cacher that has been proven and is now running on production servers under high load.
https://xcache.lighttpd.net/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.5 KiB
88 lines
1.5 KiB
#!/usr/bin/awk -f |
|
# vim:ts=4:sw=4 |
|
BEGIN { |
|
brace = 0; |
|
delete buffer; |
|
buffer_len = 0; |
|
} |
|
/^}.*;/ { |
|
if (instruct) { |
|
sub(";", ""); |
|
if (instruct == 1 && $2) { |
|
instruct = $2; |
|
} |
|
if (instruct in typedefs) { |
|
instruct = typedefs[instruct]; |
|
} |
|
elm = ""; |
|
elms = ""; |
|
for (i = 0; i in buffer; i ++) { |
|
if (i) elm = elm " + "; |
|
# elm = elm "sizeof(((`" instruct "'*)NULL)->`" buffer[i] "')"; |
|
# elms = elms " `" buffer[i] "'"; |
|
elm = elm "sizeof(((" instruct "*)NULL)->" buffer[i] ")"; |
|
|
|
if (elms == "") { |
|
elms = buffer[i]; |
|
} |
|
else { |
|
elms = elms "," buffer[i]; |
|
} |
|
} |
|
printf "define(`ELEMENTSOF_%s', `%s')\n", instruct, elms; |
|
printf "define(`COUNTOF_%s', `%s')\n", instruct, i; |
|
printf "define(`SIZEOF_%s', `( %s )')\n", instruct, elm; |
|
print "\n"; |
|
delete buffer; |
|
buffer_len = 0; |
|
instruct = 0; |
|
} |
|
next; |
|
} |
|
|
|
/.{/ { |
|
brace = brace + 1; |
|
} |
|
/.}/ { |
|
brace = brace - 1; |
|
} |
|
|
|
{ |
|
if (brace == 1 && instruct) { |
|
sub(/.*[{}]/, ""); |
|
gsub(/\[[^\]]+\]/, ""); |
|
gsub(/:[0-9]+/, ""); |
|
str = $0; |
|
if (match(str, /\([ ]*\*([^)]+)\)/, a)) { |
|
buffer[buffer_len] = a[1]; |
|
buffer_len ++; |
|
} |
|
else { |
|
while (gsub(/(\([^)]*\))/, "", str)) { |
|
} |
|
while (match(str, /([^*() ]+)[ ]*[,;](.*)/, a)) { |
|
buffer[buffer_len] = a[1]; |
|
buffer_len ++; |
|
str = a[2]; |
|
} |
|
} |
|
next; |
|
} |
|
} |
|
|
|
/^typedef struct [^{]*;/ { |
|
sub(";", ""); |
|
typedefs[$3] = $4; |
|
next; |
|
} |
|
/^typedef struct .*{/ { |
|
brace = 1; |
|
instruct = 1; |
|
next; |
|
} |
|
|
|
/^struct .*{/ { |
|
instruct = $2; |
|
brace = 1; |
|
next; |
|
}
|
|
|