File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / objnames.inc
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:16 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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>