Annotation of embedaddon/curl/tests/objnames.inc, revision 1.1
1.1 ! misho 1: # ***************************************************************************
! 2: # * _ _ ____ _
! 3: # * Project ___| | | | _ \| |
! 4: # * / __| | | | |_) | |
! 5: # * | (__| |_| | _ <| |___
! 6: # * \___|\___/|_| \_\_____|
! 7: # *
! 8: # * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
! 9: # *
! 10: # * This software is licensed as described in the file COPYING, which
! 11: # * you should have received as part of this distribution. The terms
! 12: # * are also available at https://curl.haxx.se/docs/copyright.html.
! 13: # *
! 14: # * You may opt to use, copy, modify, merge, publish, distribute and/or sell
! 15: # * copies of the Software, and permit persons to whom the Software is
! 16: # * furnished to do so, under the terms of the COPYING file.
! 17: # *
! 18: # * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
! 19: # * KIND, either express or implied.
! 20: # *
! 21: # ***************************************************************************
! 22:
! 23: #
! 24: # This file is sourced from curl/packages/OS400/initscript.sh and
! 25: # other Bourne shell scripts. Keep it as portable as possible.
! 26: #
! 27:
! 28: #
! 29: # curl_10char_object_name
! 30: #
! 31: # This shell function accepts a single string argument with unspecified
! 32: # length representing a (*.c) source file name and returns a string which
! 33: # is a transformation of given argument.
! 34: #
! 35: # The intended purpose of this function is to transliterate a (*.c) source
! 36: # file name that may be longer than 10 characters, or not, into a string
! 37: # with at most 10 characters which may be used as an OS/400 object name.
! 38: #
! 39: # This function might not be universally useful, nor we care about it.
! 40: #
! 41: # It is intended to be used with libcurl's (*.c) source file names, so
! 42: # dependency on libcurl's source file naming scheme is acceptable and
! 43: # good enough for its intended use. Specifically it makes use of the fact
! 44: # that libcurl's (*.c) source file names which may be longer than 10 chars
! 45: # are conformed with underscore '_' separated substrings, or separated by
! 46: # other character which does not belong to the [0-9], [a-z] or [A-Z] sets.
! 47: #
! 48: # This allows repeatable and automatic short object name generation with
! 49: # no need for a hardcoded mapping table.
! 50: #
! 51: # Transformation is done in the following way:
! 52: #
! 53: # 1) Leading directory components are removed.
! 54: # 2) Leftmost dot character and any other char following it are removed.
! 55: # 3) Lowercase characters are transliterated to uppercase.
! 56: # 4) Characters not in [A-Z] or [0-9] are transliterated to underscore '_'.
! 57: # 5) Every sequence of one or more underscores is replaced with a single one.
! 58: # 6) Five leftmost substrings which end in an underscore character are
! 59: # replaced by the first character of each substring, while retaining
! 60: # the rest of the string.
! 61: # 7) Finally the result is truncated to 10 characters.
! 62: #
! 63: # Resulting object name may be shorter than 10 characters.
! 64: #
! 65: # Test case 1221 does unit testng of this function and also verifies
! 66: # that it is possible to generate distinct short object names for all
! 67: # curl and libcurl *.c source file names.
! 68: #
! 69:
! 70: curl_10char_object_name() {
! 71: echo "${1}" | \
! 72: sed -e 's:.*/::' \
! 73: -e 's:[.].*::' \
! 74: -e 'y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:' \
! 75: -e 's:[^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_]:_:g' \
! 76: -e 's:__*:_:g' \
! 77: -e 's:\([^_]\)[^_]*_\(.*\):\1\2:' \
! 78: -e 's:\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3:' \
! 79: -e 's:\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4:' \
! 80: -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5:' \
! 81: -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5\6:' \
! 82: -e 's:^\(..........\).*:\1:'
! 83: }
! 84:
! 85: #
! 86: # curl_8char_object_name
! 87: #
! 88: # Same as curl_10char_object_name() description and details above, except
! 89: # that object name is limited to 8 characters maximum.
! 90: #
! 91:
! 92: curl_8char_object_name() {
! 93: echo "${1}" | \
! 94: sed -e 's:.*/::' \
! 95: -e 's:[.].*::' \
! 96: -e 'y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:' \
! 97: -e 's:[^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_]:_:g' \
! 98: -e 's:__*:_:g' \
! 99: -e 's:\([^_]\)[^_]*_\(.*\):\1\2:' \
! 100: -e 's:\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3:' \
! 101: -e 's:\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4:' \
! 102: -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5:' \
! 103: -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5\6:' \
! 104: -e 's:^\(........\).*:\1:'
! 105: }
! 106:
! 107: # end of objectname.inc
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>