diff options
Diffstat (limited to 'scripts/abilist.awk')
-rw-r--r-- | scripts/abilist.awk | 67 |
1 files changed, 9 insertions, 58 deletions
diff --git a/scripts/abilist.awk b/scripts/abilist.awk index 52b5b32..bd740d4 100644 --- a/scripts/abilist.awk +++ b/scripts/abilist.awk @@ -100,17 +100,13 @@ $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) { # Disabled -- weakness should not matter to shared library ABIs any more. #if (weak == "w") type = tolower(type); if (desc == "") - desc = " " symbol " " type size; + desc = symbol " " type size; if (combine) version = soname " " version (combine_fullname ? " " sofullname : ""); - if (version in versions) { - versions[version] = versions[version] "\n" desc; - } - else { - versions[version] = desc; - } + # Append to the string which collects the results. + descs = descs version " " desc "\n"; next; } @@ -126,65 +122,20 @@ function emit(end) { return; tofile = parse_names && !combine; - nverslist = 0; - for (version in versions) { - if (nverslist == 0) { - verslist = version; - nverslist = 1; - continue; - } - split(verslist, s, "\n"); - if (version < s[1]) { - verslist = version; - for (i = 1; i <= nverslist; ++i) { - verslist = verslist "\n" s[i]; - } - } - else { - verslist = s[1]; - for (i = 2; i <= nverslist; ++i) { - if (version < s[i]) break; - verslist = verslist "\n" s[i]; - } - verslist = verslist "\n" version; - for (; i <= nverslist; ++i) { - verslist = verslist "\n" s[i]; - } - } - ++nverslist; - } - if (tofile) { out = prefix soname ".symlist"; if (soname in outfiles) out = out "." ++outfiles[soname]; else outfiles[soname] = 1; - printf "" > out; + outpipe = "LC_ALL=C sort -u > " out; + } else { + outpipe = "LC_ALL=C sort -u"; } - split(verslist, order, "\n"); - for (i = 1; i <= nverslist; ++i) { - version = order[i]; - - if (tofile) { - print version >> out; - close(out); - outpipe = "sort >> " out; - } - else { - if (combine) - print ""; - print prefix version; - outpipe = "sort"; - } - print versions[version] | outpipe; - close(outpipe); - - delete versions[version]; - } - for (version in versions) - delete versions[version]; + printf "%s", descs | outpipe; + + descs = ""; if (tofile) print "wrote", out, "for", sofullname; |