#!/usr/bin/gawk -f # replaces _ALLOC_ID_ in all source files with unique ID for memory tracking BEGIN{ if(ARGC <= 1) { print "Usage: " ENVIRON["_"] " create|reset " exit } create_id = 0 if(ARGV[1] == "create") create_id = 1 else if (ARGV[1] != "reset") { print "Usage: " ENVIRON["_"] " create|reset " exit } cnt = 0; filename = ARGV[2] if(filename ~ /expandlabel\.c/) exit if(filename ~ /expandlabel\.h/) exit if(filename ~ /parselabel\.c/) exit f = "" start = 1 changed = 0 while(getline < filename) { if(create_id == 0) { if(!start) f = f "\n" str = gensub(/(my_(malloc|calloc|realloc|free|strcat|strncat|mstrcat|strdup|strdup2))\([0-9]+,/, "\\1(_ALLOC_ID_,", "G") if(str != $0) changed = 1 f = f str } else { if(!start) f = f "\n" if($0 !~ /^#define *_ALLOC_ID_/) { while(sub(/_ALLOC_ID_/, cnt)) { changed = 1 cnt++ } } f = f $0 } start = 0 } close(filename) if(changed) { print f > filename close(filename) } }