| //===-- 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 <limits> |
| |
| 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<std::int64_t>(length); |
| } else { |
| std::size_t max{std::numeric_limits<std::int64_t>::max()}; |
| return length > max ? 0 // Just fail. |
| : static_cast<std::int64_t>(length); |
| } |
| } |
| } // namespace Fortran::runtime |