Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/lib/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 4 kB image not shown  

Quelle  build_OID_registry   Sprache: C

 
#!/usr/bin/perl -w
SPDX-License-Identifier: GPL-2.0-or-later
java.lang.NullPointerException
Build a static ASN.1 Object Identified (OID) registry
java.lang.NullPointerException
Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
Written by David Howells (dhowells@redhat.com)
java.lang.NullPointerException

use strict;
use Cwd qw(abs_path);

my @names = ();
my @oids = ();

if ($#ARGV != 1) {
    print STDERR "Format: ", $0, " \n";
    exit(2);
}

my $abs_srctree = abs_path($ENV{'srctree'});

java.lang.NullPointerException
Open the file to read from
java.lang.NullPointerException
open IN_FILE, "<$ARGV[0]" || die;
while (<IN_FILE>) {
    chomp;
    if (m!\s+OID_([a-zA-z][a-zA-Z0-9_]+),\s+/[*]\s+([012][.0-9]*)\s+[*]/!) {
 push @names, $1;
 push @oids, $2;
    }
}
close IN_FILE || die;

java.lang.NullPointerException
Open the files to write into
java.lang.NullPointerException
open C_FILE, ">$ARGV[1]" or die;
print C_FILE "/*\n";
my $scriptname = $0;
$scriptname =~ s#^\Q$abs_srctree/\E##;
print C_FILE " * Automatically generated by ", $scriptname, ". Do not edit\n";
print C_FILE " */\n";

java.lang.NullPointerException
Split the data up into separate lists and also determine the lengths of the
encoded data arrays.
java.lang.NullPointerException
my @indices = ();
my @lengths = ();
my $total_length = 0;

for (my $i = 0; $i <= $#names; $i++) {
    my $name = $names[$i];
    my $oid = $oids[$i];

    my @components = split(/[.]/, $oid);

    Determine the encoded length of this OID
    my $size = $#components;
    for (my $loop = 2; $loop <= $#components; $loop++) {
 my $c = $components[$loop];

 We will base128 encode the number
 my $tmp = ($c == 0) ? 0 : int(log($c)/log(2));
 $tmp = int($tmp / 7);
 $size += $tmp;
    }
    push @lengths, $size;
    push @indices, $total_length;
    $total_length += $size;
}

java.lang.NullPointerException
Emit the look-up-by-OID index table
java.lang.NullPointerException
print C_FILE "\n";
if ($total_length <= 255) {
    print C_FILE "static const unsigned char oid_index[OID__NR + 1] = {\n";
else {
    print C_FILE "static const unsigned short oid_index[OID__NR + 1] = {\n";
}
for (my $i = 0; $i <= $#names; $i++) {
    print C_FILE "\t[OID_", $names[$i], "] = ", $indices[$i], ",\n"
}
print C_FILE "\t[OID__NR] = ", $total_length, "\n";
print C_FILE "};\n";

java.lang.NullPointerException
Encode the OIDs
java.lang.NullPointerException
my @encoded_oids = ();

for (my $i = 0; $i <= $#names; $i++) {
    my @octets = ();

    my @components = split(/[.]/, $oids[$i]);

    push @octets, $components[0] * 40 + $components[1];

    for (my $loop = 2; $loop <= $#components; $loop++) {
 my $c = $components[$loop];

 Base128 encode the number
 my $tmp = ($c == 0) ? 0 : int(log($c)/log(2));
 $tmp = int($tmp / 7);

 for (; $tmp > 0; $tmp--) {
     push @octets, (($c >> $tmp * 7) & 0x7f) | 0x80;
 }
 push @octets, $c & 0x7f;
    }

    push @encoded_oids, \@octets;
}

java.lang.NullPointerException
Create a hash value for each OID
java.lang.NullPointerException
my @hash_values = ();
for (my $i = 0; $i <= $#names; $i++) {
    my @octets = @{$encoded_oids[$i]};

    my $hash = $#octets;
    foreach (@octets) {
 $hash += $_ * 33;
    }

    $hash = ($hash >> 24) ^ ($hash >> 16) ^ ($hash >> 8) ^ ($hash);

    push @hash_values, $hash & 0xff;
}

java.lang.NullPointerException
Emit the OID data
java.lang.NullPointerException
print C_FILE "\n";
print C_FILE "static const unsigned char oid_data[", $total_length, "] = {\n";
for (my $i = 0; $i <= $#names; $i++) {
    my @octets = @{$encoded_oids[$i]};
    print C_FILE "\t";
    print C_FILE $_, ", " foreach (@octets);
    print C_FILE "\t// ", $names[$i];
    print C_FILE "\n";
}
print C_FILE "};\n";

java.lang.NullPointerException
Build the search index table (ordered by length then hash then content)
java.lang.NullPointerException
my @index_table = ( 0 .. $#names );

@index_table = sort {
    my @octets_a = @{$encoded_oids[$a]};
    my @octets_b = @{$encoded_oids[$b]};

    return $hash_values[$a] <=> $hash_values[$b]
 if ($hash_values[$a] != $hash_values[$b]);
    return $#octets_a <=> $#octets_b
 if ($#octets_a != $#octets_b);
    for (my $i = $#octets_a; $i >= 0; $i--) {
 return $octets_a[$i] <=> $octets_b[$i]
     if ($octets_a[$i] != $octets_b[$i]);
    }
    return 0;

} @index_table;

java.lang.NullPointerException
Emit the search index and hash value table
java.lang.NullPointerException
print C_FILE "\n";
print C_FILE "static const struct {\n";
print C_FILE "\tunsigned char hash;\n";
if ($#names <= 255) {
    print C_FILE "\tenum OID oid : 8;\n";
else {
    print C_FILE "\tenum OID oid : 16;\n";
}
print C_FILE "} oid_search_table[OID__NR] = {\n";
for (my $i = 0; $i <= $#names; $i++) {
    my @octets = @{$encoded_oids[$index_table[$i]]};
    printf(C_FILE "\t[%3u] = { %3u, OID_%-35s }, // ",
    $i,
    $hash_values[$index_table[$i]],
    $names[$index_table[$i]]);
    printf C_FILE "%02x", $_ foreach (@octets);
    print C_FILE "\n";
}
print C_FILE "};\n";

java.lang.NullPointerException
Emit the OID debugging name table
java.lang.NullPointerException
#print C_FILE "\n";
#print C_FILE "const char *const oid_name_table[OID__NR + 1] = {\n";
java.lang.NullPointerException
#for (my $i = 0; $i <= $#names; $i++) {
#    print C_FILE "\t\"", $names[$i], "\",\n"
#}
#print C_FILE "\t\"Unknown-OID\"\n";
#print C_FILE "};\n";

java.lang.NullPointerException
Polish off
java.lang.NullPointerException
close C_FILE or die;

Messung V0.5
C=95 H=92 G=93

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.