123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/usr/bin/perl
- #----------------------------------------------------------------------
- #
- # unused_oids
- # Finds blocks of manually-assignable OIDs that have not already been
- # claimed by previous hackers. The main use is for finding available
- # OIDs for new internal functions. The numbers printed are inclusive
- # ranges of unused OIDs.
- #
- # Before using a large empty block, make sure you aren't about
- # to take over what was intended as expansion space for something
- # else.
- #
- # Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
- # Portions Copyright (c) 1994, Regents of the University of California
- #
- # src/include/catalog/unused_oids
- #
- #----------------------------------------------------------------------
- use strict;
- use warnings;
- # Must run in src/include/catalog
- use FindBin;
- chdir $FindBin::RealBin or die "could not cd to $FindBin::RealBin: $!\n";
- use lib "$FindBin::RealBin/../../backend/catalog/";
- use Catalog;
- my @input_files = glob("pg_*.h");
- my $oids = Catalog::FindAllOidsFromHeaders(@input_files);
- # Also push FirstGenbkiObjectId to serve as a terminator for the last gap.
- my $FirstGenbkiObjectId =
- Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId');
- push @{$oids}, $FirstGenbkiObjectId;
- my $prev_oid = 0;
- my @sortedoids = sort { $a <=> $b } @{$oids};
- foreach my $oid (@sortedoids)
- {
- if ($oid > $prev_oid + 1)
- {
- if ($oid > $prev_oid + 2)
- {
- printf "%d - %d\n", $prev_oid + 1, $oid - 1;
- }
- else
- {
- printf "%d\n", $prev_oid + 1;
- }
- }
- $prev_oid = $oid;
- }
- my $suggestion;
- do
- {
- $suggestion = int(8000 + rand(2000));
- } while (grep(/^$suggestion$/, @{$oids}));
- my $navailable = 0;
- foreach my $oid (@sortedoids)
- {
- if ($oid > $suggestion)
- {
- $navailable = $oid - $suggestion;
- last;
- }
- }
- printf "Patches should use a more-or-less consecutive range of OIDs.\n";
- printf
- "Best practice is to start with a random choice in the range 8000-9999.\n";
- printf
- "Suggested random unused OID: $suggestion ($navailable consecutive OID(s) available starting here)\n";
|