X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/Security/libsecurity_keychain/lib/generateErrStrings.pl diff --git a/Security/libsecurity_keychain/lib/generateErrStrings.pl b/Security/libsecurity_keychain/lib/generateErrStrings.pl new file mode 100644 index 00000000..0cbe03f8 --- /dev/null +++ b/Security/libsecurity_keychain/lib/generateErrStrings.pl @@ -0,0 +1,98 @@ +#!/usr/bin/perl +# +# Copyright (c) 2003-2004,2011,2014 Apple Inc. All Rights Reserved. +# +# @APPLE_LICENSE_HEADER_START@ +# +# This file contains Original Code and/or Modifications of Original Code +# as defined in and that are subject to the Apple Public Source License +# Version 2.0 (the 'License'). You may not use this file except in +# compliance with the License. Please obtain a copy of the License at +# http://www.opensource.apple.com/apsl/ and read it before using this +# file. +# +# The Original Code and all software distributed under the License are +# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, +# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. +# Please see the License for the specific language governing rights and +# limitations under the License. +# +# @APPLE_LICENSE_HEADER_END@ +# +# generatorX.pl - create error strings files from the Security header files +# +# Usage: +# perl generatorX.pl input-directory output-directory +# +# Currently supported files are SecBase.h, SecureTransport.h and Authorization.h +# +# perl generatorX.pl `pwd` `pwd` SecBase2.h SecureTransport2.h Authorization.h +# +# Input will be like: +# +# errSSLProtocol = -9800, /* SSL protocol error */ +# errSSLNegotiation = -9801, /* Cipher Suite negotiation failure */ +# +# Output should be like (in Unicode): +# +# /* errSSLProtocol */ +# "-9800" = "SSL protocol error"; +# +# /* errSSLNegotiation */ +# "-9801" = "Cipher Suite negotiation failure"; +# +# Note that the list of errors must be numerically unique across all input files, or the strings file +# will be invalid.Comments that span multiple lines will be ignored, as will lines with no comment. C++ +# style comments are not supported. +# + +use Encode; + +$SOURCEDIR=$ARGV[0]; # directory with error headers +$TARGETDIR=$ARGV[1]; # where to put the output file +@INPUTFILES=@ARGV[2 .. 9999]; # list of input files + +$TABLES="$TARGETDIR/SecErrorMessages.strings"; # error strings + +$tabs = "\t\t\t"; # argument indentation (noncritical) +$warning = "This file was automatically generated. Do not edit on penalty of futility!"; + +# +# Parse error headers and build array of all relevant lines +# + +open(ERR, "cat " . join(" ", @INPUTFILES) . "|") or die "Cannot open error header files"; +$/=undef; # big gulp mode +$_ = ; +@errorlines = m{(?:^\s*)(err[Sec|Authorization|SSL]\w+)(?:\s*=\s*)(-?\d+)(?:\s*,?\s*)(?:/\*\s*)(.*)(?:\*/)(?:$\s*)}gm; +close(ERR); + +$nFull = $#errorlines / 3; + +# +# Now we will generate the error name tables. +# +open(OUT, ">$TABLES") or die "Cannot write $TABLES: $^E"; + +# Print warning comment +$msg = "//\n// Security error code tables.\n// $warning\n//\n"; + +# Print the error messages +while ($errx = shift @errorlines) +{ + $value = shift @errorlines; # or die; + $str = shift @errorlines; # or die; + $str =~ s/\s*$//; # drop trailing white space + if ( $value != 0) # can't output duplicate error codes + { + $msg = $msg . "\n/* $errx */\n\"$value\" = \"$str\";\n"; + } +}; +$msg = $msg . "\n"; +$output = encode("UTF-16", $msg, Encode::FB_PERLQQ); +print OUT "$output"; + +close(OUT); +select(STDOUT);