Home | History | Annotate | Line # | Download | only in utilities
utstrtoul64.c revision 1.1.1.7.4.1
      1          1.1  christos /*******************************************************************************
      2          1.1  christos  *
      3      1.1.1.3  christos  * Module Name: utstrtoul64 - String-to-integer conversion support for both
      4      1.1.1.3  christos  *                            64-bit and 32-bit integers
      5          1.1  christos  *
      6          1.1  christos  ******************************************************************************/
      7          1.1  christos 
      8          1.1  christos /*
      9  1.1.1.7.4.1   thorpej  * Copyright (C) 2000 - 2021, Intel Corp.
     10          1.1  christos  * All rights reserved.
     11          1.1  christos  *
     12          1.1  christos  * Redistribution and use in source and binary forms, with or without
     13          1.1  christos  * modification, are permitted provided that the following conditions
     14          1.1  christos  * are met:
     15          1.1  christos  * 1. Redistributions of source code must retain the above copyright
     16          1.1  christos  *    notice, this list of conditions, and the following disclaimer,
     17          1.1  christos  *    without modification.
     18          1.1  christos  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     19          1.1  christos  *    substantially similar to the "NO WARRANTY" disclaimer below
     20          1.1  christos  *    ("Disclaimer") and any redistribution must be conditioned upon
     21          1.1  christos  *    including a substantially similar Disclaimer requirement for further
     22          1.1  christos  *    binary redistribution.
     23          1.1  christos  * 3. Neither the names of the above-listed copyright holders nor the names
     24          1.1  christos  *    of any contributors may be used to endorse or promote products derived
     25          1.1  christos  *    from this software without specific prior written permission.
     26          1.1  christos  *
     27          1.1  christos  * Alternatively, this software may be distributed under the terms of the
     28          1.1  christos  * GNU General Public License ("GPL") version 2 as published by the Free
     29          1.1  christos  * Software Foundation.
     30          1.1  christos  *
     31          1.1  christos  * NO WARRANTY
     32          1.1  christos  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     33          1.1  christos  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     34  1.1.1.7.4.1   thorpej  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     35          1.1  christos  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     36          1.1  christos  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     37          1.1  christos  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     38          1.1  christos  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     39          1.1  christos  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     40          1.1  christos  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     41          1.1  christos  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     42          1.1  christos  * POSSIBILITY OF SUCH DAMAGES.
     43          1.1  christos  */
     44          1.1  christos 
     45          1.1  christos #include "acpi.h"
     46          1.1  christos #include "accommon.h"
     47          1.1  christos 
     48          1.1  christos #define _COMPONENT          ACPI_UTILITIES
     49          1.1  christos         ACPI_MODULE_NAME    ("utstrtoul64")
     50          1.1  christos 
     51          1.1  christos 
     52          1.1  christos /*******************************************************************************
     53          1.1  christos  *
     54      1.1.1.3  christos  * This module contains the top-level string to 64/32-bit unsigned integer
     55      1.1.1.3  christos  * conversion functions:
     56          1.1  christos  *
     57      1.1.1.3  christos  *  1) A standard strtoul() function that supports 64-bit integers, base
     58      1.1.1.3  christos  *     8/10/16, with integer overflow support. This is used mainly by the
     59      1.1.1.3  christos  *     iASL compiler, which implements tighter constraints on integer
     60      1.1.1.3  christos  *     constants than the runtime (interpreter) integer-to-string conversions.
     61      1.1.1.3  christos  *  2) Runtime "Explicit conversion" as defined in the ACPI specification.
     62      1.1.1.3  christos  *  3) Runtime "Implicit conversion" as defined in the ACPI specification.
     63          1.1  christos  *
     64      1.1.1.3  christos  * Current users of this module:
     65          1.1  christos  *
     66      1.1.1.3  christos  *  iASL        - Preprocessor (constants and math expressions)
     67      1.1.1.3  christos  *  iASL        - Main parser, conversion of constants to integers
     68      1.1.1.3  christos  *  iASL        - Data Table Compiler parser (constants and math expressions)
     69      1.1.1.3  christos  *  Interpreter - Implicit and explicit conversions, GPE method names
     70      1.1.1.3  christos  *  Interpreter - Repair code for return values from predefined names
     71      1.1.1.3  christos  *  Debugger    - Command line input string conversion
     72      1.1.1.3  christos  *  AcpiDump    - ACPI table physical addresses
     73      1.1.1.3  christos  *  AcpiExec    - Support for namespace overrides
     74          1.1  christos  *
     75      1.1.1.3  christos  * Notes concerning users of these interfaces:
     76          1.1  christos  *
     77      1.1.1.3  christos  * AcpiGbl_IntegerByteWidth is used to set the 32/64 bit limit for explicit
     78      1.1.1.3  christos  * and implicit conversions. This global must be set to the proper width.
     79      1.1.1.3  christos  * For the core ACPICA code, the width depends on the DSDT version. For the
     80      1.1.1.3  christos  * AcpiUtStrtoul64 interface, all conversions are 64 bits. This interface is
     81      1.1.1.3  christos  * used primarily for iASL, where the default width is 64 bits for all parsers,
     82      1.1.1.3  christos  * but error checking is performed later to flag cases where a 64-bit constant
     83      1.1.1.3  christos  * is wrongly defined in a 32-bit DSDT/SSDT.
     84      1.1.1.3  christos  *
     85      1.1.1.3  christos  * In ACPI, the only place where octal numbers are supported is within
     86      1.1.1.3  christos  * the ASL language itself. This is implemented via the main AcpiUtStrtoul64
     87      1.1.1.3  christos  * interface. According the ACPI specification, there is no ACPI runtime
     88      1.1.1.3  christos  * support (explicit/implicit) for octal string conversions.
     89          1.1  christos  *
     90          1.1  christos  ******************************************************************************/
     91          1.1  christos 
     92          1.1  christos 
     93          1.1  christos /*******************************************************************************
     94          1.1  christos  *
     95          1.1  christos  * FUNCTION:    AcpiUtStrtoul64
     96          1.1  christos  *
     97      1.1.1.3  christos  * PARAMETERS:  String                  - Null terminated input string,
     98      1.1.1.3  christos  *                                        must be a valid pointer
     99          1.1  christos  *              ReturnValue             - Where the converted integer is
    100      1.1.1.3  christos  *                                        returned. Must be a valid pointer
    101          1.1  christos  *
    102      1.1.1.3  christos  * RETURN:      Status and converted integer. Returns an exception on a
    103      1.1.1.3  christos  *              64-bit numeric overflow
    104          1.1  christos  *
    105      1.1.1.3  christos  * DESCRIPTION: Convert a string into an unsigned integer. Always performs a
    106      1.1.1.3  christos  *              full 64-bit conversion, regardless of the current global
    107      1.1.1.3  christos  *              integer width. Supports Decimal, Hex, and Octal strings.
    108      1.1.1.3  christos  *
    109      1.1.1.3  christos  * Current users of this function:
    110      1.1.1.3  christos  *
    111      1.1.1.3  christos  *  iASL        - Preprocessor (constants and math expressions)
    112      1.1.1.3  christos  *  iASL        - Main ASL parser, conversion of ASL constants to integers
    113      1.1.1.3  christos  *  iASL        - Data Table Compiler parser (constants and math expressions)
    114      1.1.1.3  christos  *  Interpreter - Repair code for return values from predefined names
    115      1.1.1.3  christos  *  AcpiDump    - ACPI table physical addresses
    116      1.1.1.3  christos  *  AcpiExec    - Support for namespace overrides
    117          1.1  christos  *
    118          1.1  christos  ******************************************************************************/
    119          1.1  christos 
    120          1.1  christos ACPI_STATUS
    121          1.1  christos AcpiUtStrtoul64 (
    122          1.1  christos     char                    *String,
    123          1.1  christos     UINT64                  *ReturnValue)
    124          1.1  christos {
    125          1.1  christos     ACPI_STATUS             Status = AE_OK;
    126      1.1.1.3  christos     UINT8                   OriginalBitWidth;
    127      1.1.1.3  christos     UINT32                  Base = 10;          /* Default is decimal */
    128          1.1  christos 
    129          1.1  christos 
    130          1.1  christos     ACPI_FUNCTION_TRACE_STR (UtStrtoul64, String);
    131          1.1  christos 
    132          1.1  christos 
    133          1.1  christos     *ReturnValue = 0;
    134          1.1  christos 
    135      1.1.1.3  christos     /* A NULL return string returns a value of zero */
    136          1.1  christos 
    137          1.1  christos     if (*String == 0)
    138          1.1  christos     {
    139          1.1  christos         return_ACPI_STATUS (AE_OK);
    140          1.1  christos     }
    141          1.1  christos 
    142      1.1.1.3  christos     if (!AcpiUtRemoveWhitespace (&String))
    143          1.1  christos     {
    144          1.1  christos         return_ACPI_STATUS (AE_OK);
    145          1.1  christos     }
    146          1.1  christos 
    147          1.1  christos     /*
    148      1.1.1.3  christos      * 1) Check for a hex constant. A "0x" prefix indicates base 16.
    149          1.1  christos      */
    150      1.1.1.3  christos     if (AcpiUtDetectHexPrefix (&String))
    151          1.1  christos     {
    152          1.1  christos         Base = 16;
    153          1.1  christos     }
    154          1.1  christos 
    155      1.1.1.3  christos     /*
    156      1.1.1.3  christos      * 2) Check for an octal constant, defined to be a leading zero
    157      1.1.1.3  christos      * followed by sequence of octal digits (0-7)
    158      1.1.1.3  christos      */
    159      1.1.1.3  christos     else if (AcpiUtDetectOctalPrefix (&String))
    160          1.1  christos     {
    161      1.1.1.3  christos         Base = 8;
    162          1.1  christos     }
    163          1.1  christos 
    164      1.1.1.3  christos     if (!AcpiUtRemoveLeadingZeros (&String))
    165          1.1  christos     {
    166      1.1.1.3  christos         return_ACPI_STATUS (AE_OK);     /* Return value 0 */
    167          1.1  christos     }
    168          1.1  christos 
    169      1.1.1.3  christos     /*
    170      1.1.1.3  christos      * Force a full 64-bit conversion. The caller (usually iASL) must
    171      1.1.1.3  christos      * check for a 32-bit overflow later as necessary (If current mode
    172      1.1.1.3  christos      * is 32-bit, meaning a 32-bit DSDT).
    173      1.1.1.3  christos      */
    174      1.1.1.3  christos     OriginalBitWidth = AcpiGbl_IntegerBitWidth;
    175      1.1.1.3  christos     AcpiGbl_IntegerBitWidth = 64;
    176          1.1  christos 
    177      1.1.1.3  christos     /*
    178      1.1.1.3  christos      * Perform the base 8, 10, or 16 conversion. A 64-bit numeric overflow
    179      1.1.1.3  christos      * will return an exception (to allow iASL to flag the statement).
    180      1.1.1.3  christos      */
    181      1.1.1.3  christos     switch (Base)
    182          1.1  christos     {
    183      1.1.1.3  christos     case 8:
    184      1.1.1.3  christos         Status = AcpiUtConvertOctalString (String, ReturnValue);
    185      1.1.1.3  christos         break;
    186          1.1  christos 
    187      1.1.1.3  christos     case 10:
    188      1.1.1.3  christos         Status = AcpiUtConvertDecimalString (String, ReturnValue);
    189      1.1.1.3  christos         break;
    190          1.1  christos 
    191      1.1.1.3  christos     case 16:
    192      1.1.1.3  christos     default:
    193      1.1.1.3  christos         Status = AcpiUtConvertHexString (String, ReturnValue);
    194      1.1.1.3  christos         break;
    195          1.1  christos     }
    196          1.1  christos 
    197      1.1.1.3  christos     /* Only possible exception from above is a 64-bit overflow */
    198      1.1.1.3  christos 
    199      1.1.1.3  christos     AcpiGbl_IntegerBitWidth = OriginalBitWidth;
    200          1.1  christos     return_ACPI_STATUS (Status);
    201          1.1  christos }
    202          1.1  christos 
    203          1.1  christos 
    204          1.1  christos /*******************************************************************************
    205          1.1  christos  *
    206      1.1.1.3  christos  * FUNCTION:    AcpiUtImplicitStrtoul64
    207      1.1.1.3  christos  *
    208      1.1.1.3  christos  * PARAMETERS:  String                  - Null terminated input string,
    209      1.1.1.3  christos  *                                        must be a valid pointer
    210      1.1.1.3  christos  *
    211      1.1.1.3  christos  * RETURN:      Converted integer
    212      1.1.1.3  christos  *
    213      1.1.1.3  christos  * DESCRIPTION: Perform a 64-bit conversion with restrictions placed upon
    214      1.1.1.3  christos  *              an "implicit conversion" by the ACPI specification. Used by
    215      1.1.1.3  christos  *              many ASL operators that require an integer operand, and support
    216      1.1.1.3  christos  *              an automatic (implicit) conversion from a string operand
    217      1.1.1.3  christos  *              to the final integer operand. The major restriction is that
    218      1.1.1.3  christos  *              only hex strings are supported.
    219      1.1.1.3  christos  *
    220      1.1.1.3  christos  * -----------------------------------------------------------------------------
    221      1.1.1.3  christos  *
    222      1.1.1.3  christos  * Base is always 16, either with or without the 0x prefix. Decimal and
    223      1.1.1.3  christos  * Octal strings are not supported, as per the ACPI specification.
    224      1.1.1.3  christos  *
    225      1.1.1.3  christos  * Examples (both are hex values):
    226      1.1.1.3  christos  *      Add ("BA98", Arg0, Local0)
    227      1.1.1.3  christos  *      Subtract ("0x12345678", Arg1, Local1)
    228      1.1.1.3  christos  *
    229      1.1.1.3  christos  * Conversion rules as extracted from the ACPI specification:
    230      1.1.1.3  christos  *
    231      1.1.1.3  christos  *  The converted integer is initialized to the value zero.
    232      1.1.1.3  christos  *  The ASCII string is always interpreted as a hexadecimal constant.
    233      1.1.1.3  christos  *
    234      1.1.1.3  christos  *  1)  According to the ACPI specification, a "0x" prefix is not allowed.
    235      1.1.1.3  christos  *      However, ACPICA allows this as an ACPI extension on general
    236      1.1.1.3  christos  *      principle. (NO ERROR)
    237      1.1.1.3  christos  *
    238      1.1.1.3  christos  *  2)  The conversion terminates when the size of an integer is reached
    239      1.1.1.3  christos  *      (32 or 64 bits). There are no numeric overflow conditions. (NO ERROR)
    240          1.1  christos  *
    241      1.1.1.3  christos  *  3)  The first non-hex character terminates the conversion and returns
    242      1.1.1.3  christos  *      the current accumulated value of the converted integer (NO ERROR).
    243          1.1  christos  *
    244      1.1.1.3  christos  *  4)  Conversion of a null (zero-length) string to an integer is
    245      1.1.1.3  christos  *      technically not allowed. However, ACPICA allows this as an ACPI
    246      1.1.1.3  christos  *      extension. The conversion returns the value 0. (NO ERROR)
    247          1.1  christos  *
    248      1.1.1.3  christos  * NOTE: There are no error conditions returned by this function. At
    249      1.1.1.3  christos  * the minimum, a value of zero is returned.
    250      1.1.1.3  christos  *
    251      1.1.1.3  christos  * Current users of this function:
    252      1.1.1.3  christos  *
    253      1.1.1.3  christos  *  Interpreter - All runtime implicit conversions, as per ACPI specification
    254      1.1.1.3  christos  *  iASL        - Data Table Compiler parser (constants and math expressions)
    255          1.1  christos  *
    256          1.1  christos  ******************************************************************************/
    257          1.1  christos 
    258      1.1.1.3  christos UINT64
    259      1.1.1.3  christos AcpiUtImplicitStrtoul64 (
    260      1.1.1.3  christos     char                    *String)
    261          1.1  christos {
    262      1.1.1.3  christos     UINT64                  ConvertedInteger = 0;
    263          1.1  christos 
    264          1.1  christos 
    265      1.1.1.3  christos     ACPI_FUNCTION_TRACE_STR (UtImplicitStrtoul64, String);
    266          1.1  christos 
    267          1.1  christos 
    268      1.1.1.3  christos     if (!AcpiUtRemoveWhitespace (&String))
    269      1.1.1.3  christos     {
    270      1.1.1.3  christos         return_VALUE (0);
    271      1.1.1.3  christos     }
    272          1.1  christos 
    273      1.1.1.3  christos     /*
    274      1.1.1.3  christos      * Per the ACPI specification, only hexadecimal is supported for
    275      1.1.1.3  christos      * implicit conversions, and the "0x" prefix is "not allowed".
    276      1.1.1.3  christos      * However, allow a "0x" prefix as an ACPI extension.
    277      1.1.1.3  christos      */
    278      1.1.1.5  christos     AcpiUtRemoveHexPrefix (&String);
    279          1.1  christos 
    280      1.1.1.3  christos     if (!AcpiUtRemoveLeadingZeros (&String))
    281      1.1.1.3  christos     {
    282      1.1.1.3  christos         return_VALUE (0);
    283          1.1  christos     }
    284          1.1  christos 
    285      1.1.1.3  christos     /*
    286      1.1.1.3  christos      * Ignore overflow as per the ACPI specification. This is implemented by
    287      1.1.1.3  christos      * ignoring the return status from the conversion function called below.
    288      1.1.1.3  christos      * On overflow, the input string is simply truncated.
    289      1.1.1.3  christos      */
    290      1.1.1.3  christos     AcpiUtConvertHexString (String, &ConvertedInteger);
    291      1.1.1.3  christos     return_VALUE (ConvertedInteger);
    292          1.1  christos }
    293          1.1  christos 
    294          1.1  christos 
    295          1.1  christos /*******************************************************************************
    296          1.1  christos  *
    297      1.1.1.3  christos  * FUNCTION:    AcpiUtExplicitStrtoul64
    298          1.1  christos  *
    299      1.1.1.3  christos  * PARAMETERS:  String                  - Null terminated input string,
    300      1.1.1.3  christos  *                                        must be a valid pointer
    301          1.1  christos  *
    302      1.1.1.3  christos  * RETURN:      Converted integer
    303          1.1  christos  *
    304      1.1.1.3  christos  * DESCRIPTION: Perform a 64-bit conversion with the restrictions placed upon
    305      1.1.1.3  christos  *              an "explicit conversion" by the ACPI specification. The
    306      1.1.1.3  christos  *              main restriction is that only hex and decimal are supported.
    307      1.1.1.3  christos  *
    308      1.1.1.3  christos  * -----------------------------------------------------------------------------
    309      1.1.1.3  christos  *
    310      1.1.1.3  christos  * Base is either 10 (default) or 16 (with 0x prefix). Octal (base 8) strings
    311      1.1.1.3  christos  * are not supported, as per the ACPI specification.
    312      1.1.1.3  christos  *
    313      1.1.1.3  christos  * Examples:
    314      1.1.1.3  christos  *      ToInteger ("1000")      Decimal
    315      1.1.1.3  christos  *      ToInteger ("0xABCD")    Hex
    316      1.1.1.3  christos  *
    317      1.1.1.3  christos  * Conversion rules as extracted from the ACPI specification:
    318      1.1.1.3  christos  *
    319      1.1.1.3  christos  *  1)  The input string is either a decimal or hexadecimal numeric string.
    320      1.1.1.3  christos  *      A hex value must be prefixed by "0x" or it is interpreted as decimal.
    321      1.1.1.3  christos  *
    322      1.1.1.3  christos  *  2)  The value must not exceed the maximum of an integer value
    323      1.1.1.3  christos  *      (32 or 64 bits). The ACPI specification states the behavior is
    324      1.1.1.3  christos  *      "unpredictable", so ACPICA matches the behavior of the implicit
    325      1.1.1.3  christos  *      conversion case. There are no numeric overflow conditions. (NO ERROR)
    326      1.1.1.3  christos  *
    327      1.1.1.3  christos  *  3)  Behavior on the first non-hex character is not defined by the ACPI
    328      1.1.1.3  christos  *      specification (for the ToInteger operator), so ACPICA matches the
    329      1.1.1.3  christos  *      behavior of the implicit conversion case. It terminates the
    330      1.1.1.3  christos  *      conversion and returns the current accumulated value of the converted
    331      1.1.1.3  christos  *      integer. (NO ERROR)
    332      1.1.1.3  christos  *
    333      1.1.1.3  christos  *  4)  Conversion of a null (zero-length) string to an integer is
    334      1.1.1.3  christos  *      technically not allowed. However, ACPICA allows this as an ACPI
    335      1.1.1.3  christos  *      extension. The conversion returns the value 0. (NO ERROR)
    336      1.1.1.3  christos  *
    337      1.1.1.3  christos  * NOTE: There are no error conditions returned by this function. At the
    338      1.1.1.3  christos  * minimum, a value of zero is returned.
    339      1.1.1.3  christos  *
    340      1.1.1.3  christos  * Current users of this function:
    341      1.1.1.3  christos  *
    342      1.1.1.3  christos  *  Interpreter - Runtime ASL ToInteger operator, as per the ACPI specification
    343          1.1  christos  *
    344          1.1  christos  ******************************************************************************/
    345          1.1  christos 
    346      1.1.1.3  christos UINT64
    347      1.1.1.3  christos AcpiUtExplicitStrtoul64 (
    348      1.1.1.3  christos     char                    *String)
    349          1.1  christos {
    350      1.1.1.3  christos     UINT64                  ConvertedInteger = 0;
    351      1.1.1.3  christos     UINT32                  Base = 10;          /* Default is decimal */
    352          1.1  christos 
    353          1.1  christos 
    354      1.1.1.3  christos     ACPI_FUNCTION_TRACE_STR (UtExplicitStrtoul64, String);
    355          1.1  christos 
    356          1.1  christos 
    357      1.1.1.3  christos     if (!AcpiUtRemoveWhitespace (&String))
    358      1.1.1.3  christos     {
    359      1.1.1.3  christos         return_VALUE (0);
    360      1.1.1.3  christos     }
    361          1.1  christos 
    362      1.1.1.3  christos     /*
    363      1.1.1.3  christos      * Only Hex and Decimal are supported, as per the ACPI specification.
    364      1.1.1.3  christos      * A "0x" prefix indicates hex; otherwise decimal is assumed.
    365      1.1.1.3  christos      */
    366      1.1.1.3  christos     if (AcpiUtDetectHexPrefix (&String))
    367      1.1.1.3  christos     {
    368      1.1.1.3  christos         Base = 16;
    369      1.1.1.3  christos     }
    370          1.1  christos 
    371      1.1.1.3  christos     if (!AcpiUtRemoveLeadingZeros (&String))
    372      1.1.1.3  christos     {
    373      1.1.1.3  christos         return_VALUE (0);
    374      1.1.1.3  christos     }
    375          1.1  christos 
    376      1.1.1.3  christos     /*
    377      1.1.1.3  christos      * Ignore overflow as per the ACPI specification. This is implemented by
    378      1.1.1.3  christos      * ignoring the return status from the conversion functions called below.
    379      1.1.1.3  christos      * On overflow, the input string is simply truncated.
    380      1.1.1.3  christos      */
    381      1.1.1.3  christos     switch (Base)
    382      1.1.1.3  christos     {
    383      1.1.1.3  christos     case 10:
    384      1.1.1.3  christos     default:
    385      1.1.1.3  christos         AcpiUtConvertDecimalString (String, &ConvertedInteger);
    386      1.1.1.3  christos         break;
    387          1.1  christos 
    388      1.1.1.3  christos     case 16:
    389      1.1.1.3  christos         AcpiUtConvertHexString (String, &ConvertedInteger);
    390      1.1.1.3  christos         break;
    391          1.1  christos     }
    392          1.1  christos 
    393      1.1.1.3  christos     return_VALUE (ConvertedInteger);
    394          1.1  christos }
    395