MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / find_in_path

Function find_in_path

src/cli/cli.c:934–962  ·  view source on GitHub ↗

Search for an executable named `name` in the PATH environment variable. * Returns the full path in `out` (max out_sz) if found, else empty string. */

Source from the content-addressed store, hash-verified

932/* Search for an executable named `name` in the PATH environment variable.
933 * Returns the full path in `out` (max out_sz) if found, else empty string. */
934static bool find_in_path(const char *name, char *out, size_t out_sz) {
935 char path_copy[CLI_BUF_4K];
936 if (!cbm_safe_getenv("PATH", path_copy, sizeof(path_copy), NULL)) {
937 return false;
938 }
939 char *saveptr;
940 char *dir = strtok_r(path_copy, PATH_DELIM, &saveptr);
941 while (dir) {
942 snprintf(out, out_sz, "%s/%s", dir, name);
943 if (is_executable(out)) {
944 return true;
945 }
946#ifdef _WIN32
947 /* On Windows executables carry an extension (PATHEXT). A CLI like
948 * opencode is often installed as a .cmd / .ps1 / .exe shim (e.g. via
949 * mise or npm), so the bare-name probe above misses it (#221). Try the
950 * common executable extensions before moving to the next PATH entry. */
951 static const char *const win_exts[] = {".exe", ".cmd", ".bat", ".ps1", NULL};
952 for (int i = 0; win_exts[i]; i++) {
953 snprintf(out, out_sz, "%s/%s%s", dir, name, win_exts[i]);
954 if (is_executable(out)) {
955 return true;
956 }
957 }
958#endif
959 dir = strtok_r(NULL, PATH_DELIM, &saveptr);
960 }
961 return false;
962}
963
964const char *cbm_find_cli(const char *name, const char *home_dir) {
965 static char buf[CLI_BUF_512];

Callers 2

cbm_find_cliFunction · 0.85
cbm_agent_cli_existsFunction · 0.85

Calls 2

cbm_safe_getenvFunction · 0.85
is_executableFunction · 0.85

Tested by

no test coverage detected