//===-- runtime/command.cpp -----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "flang/Runtime/command.h" #include "environment.h" #include namespace Fortran::runtime { std::int32_t RTNAME(ArgumentCount)() { int argc{executionEnvironment.argc}; if (argc > 1) { // C counts the command name as one of the arguments, but Fortran doesn't. return argc - 1; } return 0; } std::int64_t RTNAME(ArgumentLength)(std::int32_t n) { if (n < 0 || n >= executionEnvironment.argc) { return 0; } std::size_t length{std::strlen(executionEnvironment.argv[n])}; if constexpr (sizeof(std::size_t) <= sizeof(std::int64_t)) { return static_cast(length); } else { std::size_t max{std::numeric_limits::max()}; return length > max ? 0 // Just fail. : static_cast(length); } } } // namespace Fortran::runtime