Changeset a7cd739 in OpenModelica


Ignore:
Timestamp:
2023-03-27T17:19:14+02:00 (13 months ago)
Author:
GitHub <noreply@…>
Branches:
maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master
Children:
92b6780
Parents:
10cfde04
git-author:
Per Östlund <per.ostlund@…> (03/27/23 17:19:14)
git-committer:
GitHub <noreply@…> (03/27/23 17:19:14)
Message:

Fix intString/stringInt on 64-bit Windows (#10453)

  • Change intString to use the PRINT_MMC_SINT_T macro for the format string instead of assuming it's a long, and change to snprintf just to be safe.
  • Change stringInt to use modelica_integer instead of long, and use MODELICA_INT_MIN/MAX instead of INT_MIN/MAX.
Location:
OMCompiler/SimulationRuntime/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • OMCompiler/SimulationRuntime/c/meta/meta_modelica_builtin.c

    rb0b1473 ra7cd739  
    5050  if (i>=0 && i<=9) /* Small integers are used so much it makes sense to cache them */
    5151    return mmc_strings_len1['0'+i];
    52   sprintf(buffer, "%ld", (long) i);
     52  snprintf(buffer, 22, "%" PRINT_MMC_SINT_T, i);
    5353  res = mmc_mk_scon(buffer);
    5454  MMC_CHECK_STRING(res);
     
    8181modelica_integer nobox_stringInt(threadData_t *threadData,metamodelica_string s)
    8282{
    83   long res;
     83  modelica_integer res;
    8484  char *endptr,*str=MMC_STRINGDATA(s);
    8585  MMC_CHECK_STRING(s);
    8686  errno = 0;
     87#if defined(_WIN64) || defined(__MINGW64__)
     88  res = strtoll(str,&endptr,10);
     89#else
    8790  res = strtol(str,&endptr,10);
     91#endif
    8892  if (errno != 0 || str == endptr)
    8993    MMC_THROW_INTERNAL();
    9094  if (*endptr != '\0')
    9195    MMC_THROW_INTERNAL();
    92   if (res > INT_MAX || res < INT_MIN)
     96  if (res > MODELICA_INT_MAX || res < MODELICA_INT_MIN)
    9397    MMC_THROW_INTERNAL();
    9498  return res;
  • OMCompiler/SimulationRuntime/c/openmodelica_types.h

    ra96d222 ra7cd739  
    4949typedef unsigned long mmc_uint_t;
    5050typedef long mmc_sint_t;
    51 #define MODELICA_INT_MIN LONG_MIN;
    52 #define MODELICA_INT_MAX LONG_MAX;
     51#define MODELICA_INT_MIN LONG_MIN
     52#define MODELICA_INT_MAX LONG_MAX
    5353
    5454#elif defined(_LLP64) || defined(_WIN64) || defined(__MINGW64__) /* windows 64bit */
     
    6767typedef unsigned long long mmc_uint_t;
    6868typedef long long mmc_sint_t;
    69 #define MODELICA_INT_MIN LONG_MIN;
    70 #define MODELICA_INT_MAX LONG_MAX;
     69#define MODELICA_INT_MIN LONG_MIN
     70#define MODELICA_INT_MAX LONG_MAX
    7171
    7272#else /* 32bit platforms */
     
    7979typedef unsigned int mmc_uint_t;
    8080typedef int mmc_sint_t;
    81 #define MODELICA_INT_MIN INT_MIN;
    82 #define MODELICA_INT_MAX INT_MAX;
     81#define MODELICA_INT_MIN INT_MIN
     82#define MODELICA_INT_MAX INT_MAX
    8383
    8484#endif
Note: See TracChangeset for help on using the changeset viewer.