mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-29 06:13:20 +00:00
Revert "argv: don't reassign parameters"
This reverts commit ba455c81b4
.
This commit is contained in:
parent
d91b48b866
commit
dd582abcc5
1 changed files with 13 additions and 7 deletions
20
src/fish.cpp
20
src/fish.cpp
|
@ -100,7 +100,7 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0)
|
||||||
#ifdef CMAKE_BINARY_DIR
|
#ifdef CMAKE_BINARY_DIR
|
||||||
// Detect if we're running right out of the CMAKE build directory
|
// Detect if we're running right out of the CMAKE build directory
|
||||||
if (string_prefixes_string(CMAKE_BINARY_DIR, exec_path.c_str())) {
|
if (string_prefixes_string(CMAKE_BINARY_DIR, exec_path.c_str())) {
|
||||||
debug(2, "Running out of build directory, using paths relative to CMAKE_SOURCE_DIR:\n %s", CMAKE_SOURCE_DIR);
|
debug(2, "Running out of5 build directory, using paths relative to CMAKE_SOURCE_DIR:\n %s", CMAKE_SOURCE_DIR);
|
||||||
|
|
||||||
done = true;
|
done = true;
|
||||||
paths.data = wcstring{L"" CMAKE_SOURCE_DIR} + L"/share";
|
paths.data = wcstring{L"" CMAKE_SOURCE_DIR} + L"/share";
|
||||||
|
@ -218,7 +218,7 @@ int run_command_list(std::vector<std::string> *cmds, const io_chain_t &io) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse the argument list, return the index of the first non-flag arguments.
|
/// Parse the argument list, return the index of the first non-flag arguments.
|
||||||
static int fish_parse_opt(const int argc, char * const argv[], fish_cmd_opts_t *opts) {
|
static int fish_parse_opt(int argc, char **argv, fish_cmd_opts_t *opts) {
|
||||||
static const char * const short_opts = "+hPilnvc:C:p:d:f:D:";
|
static const char * const short_opts = "+hPilnvc:C:p:d:f:D:";
|
||||||
static const struct option long_opts[] = {{"command", required_argument, NULL, 'c'},
|
static const struct option long_opts[] = {{"command", required_argument, NULL, 'c'},
|
||||||
{"init-command", required_argument, NULL, 'C'},
|
{"init-command", required_argument, NULL, 'C'},
|
||||||
|
@ -318,7 +318,7 @@ static int fish_parse_opt(const int argc, char * const argv[], fish_cmd_opts_t *
|
||||||
}
|
}
|
||||||
|
|
||||||
// If our command name begins with a dash that implies we're a login shell.
|
// If our command name begins with a dash that implies we're a login shell.
|
||||||
is_login |= program_name[0] == '-';
|
is_login |= argv[0][0] == '-';
|
||||||
|
|
||||||
// We are an interactive session if we have not been given an explicit
|
// We are an interactive session if we have not been given an explicit
|
||||||
// command or file to execute and stdin is a tty. Note that the -i or
|
// command or file to execute and stdin is a tty. Note that the -i or
|
||||||
|
@ -330,11 +330,17 @@ static int fish_parse_opt(const int argc, char * const argv[], fish_cmd_opts_t *
|
||||||
return optind;
|
return optind;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(const int argc, char * const argv[]) {
|
int main(int argc, char **argv) {
|
||||||
int res = 1;
|
int res = 1;
|
||||||
int my_optind = 0;
|
int my_optind = 0;
|
||||||
program_name = argv[0] ? argv[0] : "fish";
|
|
||||||
|
|
||||||
|
const char *dummy_argv[2] = {"fish", NULL};
|
||||||
|
if (!argv[0]) {
|
||||||
|
argv = (char **)dummy_argv; //!OCLINT(parameter reassignment)
|
||||||
|
argc = 1; //!OCLINT(parameter reassignment)
|
||||||
|
}
|
||||||
|
|
||||||
|
program_name = argv[0];
|
||||||
set_main_thread();
|
set_main_thread();
|
||||||
setup_fork_guards();
|
setup_fork_guards();
|
||||||
signal_unblock_all();
|
signal_unblock_all();
|
||||||
|
@ -359,7 +365,7 @@ int main(const int argc, char * const argv[]) {
|
||||||
save_term_foreground_process_group();
|
save_term_foreground_process_group();
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct config_paths_t paths = determine_config_directory_paths(program_name);
|
const struct config_paths_t paths = determine_config_directory_paths(argv[0]);
|
||||||
env_init(&paths);
|
env_init(&paths);
|
||||||
// Set features early in case other initialization depends on them.
|
// Set features early in case other initialization depends on them.
|
||||||
// Start with the ones set in the environment, then those set on the command line (so the
|
// Start with the ones set in the environment, then those set on the command line (so the
|
||||||
|
@ -409,7 +415,7 @@ int main(const int argc, char * const argv[]) {
|
||||||
set_cloexec(fd);
|
set_cloexec(fd);
|
||||||
|
|
||||||
wcstring_list_t list;
|
wcstring_list_t list;
|
||||||
for (char * const *ptr = argv + my_optind; *ptr; ptr++) {
|
for (char **ptr = argv + my_optind; *ptr; ptr++) {
|
||||||
list.push_back(str2wcstring(*ptr));
|
list.push_back(str2wcstring(*ptr));
|
||||||
}
|
}
|
||||||
env_set(L"argv", ENV_DEFAULT, list);
|
env_set(L"argv", ENV_DEFAULT, list);
|
||||||
|
|
Loading…
Reference in a new issue