12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #! /usr/bin/env perl
- # Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
- #
- # Licensed under the Apache License 2.0 (the "License"). You may not use
- # this file except in compliance with the License. You can obtain a copy
- # in the file LICENSE in the source distribution or at
- # https://www.openssl.org/source/license.html
- use strict;
- use OpenSSL::Test qw/:DEFAULT srctop_file/;
- setup("test_ordinals");
- plan tests => 2;
- ok(testordinals(srctop_file("util", "libcrypto.num")), "Test libcrypto.num");
- ok(testordinals(srctop_file("util", "libssl.num")), "Test libssl.num");
- sub testordinals
- {
- my $filename = shift;
- my $cnt = 0;
- my $ret = 1;
- my $qualifier = "";
- my $newqual;
- my $lastfunc = "";
- open(my $fh, '<', $filename);
- while (my $line = <$fh>) {
- my @tokens = split(/(?:\s+|\s*:\s*)/, $line);
- #Check the line looks sane
- if ($#tokens < 5 || $#tokens > 6) {
- print STDERR "Invalid line:\n$line\n";
- $ret = 0;
- last;
- }
- if ($tokens[3] eq "NOEXIST") {
- #Ignore this line
- next;
- }
- #Some ordinals can be repeated, e.g. if one is VMS and another is !VMS
- $newqual = $tokens[4];
- $newqual =~ s/!//g;
- my $number = $tokens[1];
- $number = $cnt + 1 if $number eq '?';
- $number = $cnt if $number eq '?+';
- if ($cnt > $number
- || ($cnt == $number && ($qualifier ne $newqual
- || $qualifier eq ""))) {
- print STDERR "Invalid ordinal detected: ".$tokens[1]."\n";
- $ret = 0;
- last;
- }
- $cnt = $tokens[1];
- $qualifier = $newqual;
- $lastfunc = $tokens[0];
- }
- close($fh);
- return $ret;
- }
|