xiaoxiang781216 commented on code in PR #2300: URL: https://github.com/apache/nuttx-apps/pull/2300#discussion_r1501638151
########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" Review Comment: remove too ########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" +#endif + +#include "nsh.h" + +/**************************************************************************** + * Preprocessor Macros + ****************************************************************************/ + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define SUFFIX_MAX (CONFIG_NSH_PROMPT_SUFFIX_MAX) +#define PROMPT_MAX (CONFIG_NSH_PROMPT_MAX - SUFFIX_MAX) + +/**************************************************************************** + * Private Variables + ****************************************************************************/ + +static char g_nshprompt[CONFIG_NSH_PROMPT_MAX] = CONFIG_NSH_PROMPT_STRING; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: nsh_update_prompt + * + * Description: + * This function updates g_nshprompt with latest data based on prioritized + * sources, from highest to lowest priority: + * + * - non-empty NSH_PROMPT_STRING w/o appending suffix + * - non-empty NSH_PROMPT_ENV variable value with suffix appended + * - non-empty HOSTNAME with g_prompt_suffix appended + * - g_prompt_suffix + * + * Results: + * - updated g_nsh_prompt value if necessary. + * + ****************************************************************************/ + +void nsh_update_prompt(void) +{ + size_t i; /* position to appending the suffix */ + + if (CONFIG_NSH_PROMPT_STRING[0] == '\0') + { +#ifndef CONFIG_DISABLE_ENVIRON + if (getenv(CONFIG_NSH_PROMPT_ENV)) + { + strlcpy(g_nshprompt, getenv(CONFIG_NSH_PROMPT_ENV), + sizeof(g_nshprompt)); Review Comment: ```suggestion NSH_PROMPT_MAX); ``` ########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" +#endif + +#include "nsh.h" + +/**************************************************************************** + * Preprocessor Macros + ****************************************************************************/ + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) Review Comment: remove MIN ########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" +#endif + +#include "nsh.h" + +/**************************************************************************** + * Preprocessor Macros + ****************************************************************************/ + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define SUFFIX_MAX (CONFIG_NSH_PROMPT_SUFFIX_MAX) Review Comment: remove SUFFIX_MAX ########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" +#endif + +#include "nsh.h" + +/**************************************************************************** + * Preprocessor Macros + ****************************************************************************/ + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define SUFFIX_MAX (CONFIG_NSH_PROMPT_SUFFIX_MAX) +#define PROMPT_MAX (CONFIG_NSH_PROMPT_MAX - SUFFIX_MAX) + +/**************************************************************************** + * Private Variables + ****************************************************************************/ + +static char g_nshprompt[CONFIG_NSH_PROMPT_MAX] = CONFIG_NSH_PROMPT_STRING; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: nsh_update_prompt + * + * Description: + * This function updates g_nshprompt with latest data based on prioritized + * sources, from highest to lowest priority: + * + * - non-empty NSH_PROMPT_STRING w/o appending suffix + * - non-empty NSH_PROMPT_ENV variable value with suffix appended + * - non-empty HOSTNAME with g_prompt_suffix appended + * - g_prompt_suffix + * + * Results: + * - updated g_nsh_prompt value if necessary. + * + ****************************************************************************/ + +void nsh_update_prompt(void) +{ + size_t i; /* position to appending the suffix */ + + if (CONFIG_NSH_PROMPT_STRING[0] == '\0') + { +#ifndef CONFIG_DISABLE_ENVIRON + if (getenv(CONFIG_NSH_PROMPT_ENV)) + { + strlcpy(g_nshprompt, getenv(CONFIG_NSH_PROMPT_ENV), + sizeof(g_nshprompt)); + } + else +#endif + { + gethostname(g_nshprompt, sizeof(g_nshprompt)); Review Comment: ```suggestion gethostname(g_nshprompt, NSH_PROMPT_MAX); ``` ########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" +#endif + +#include "nsh.h" + +/**************************************************************************** + * Preprocessor Macros + ****************************************************************************/ + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define SUFFIX_MAX (CONFIG_NSH_PROMPT_SUFFIX_MAX) +#define PROMPT_MAX (CONFIG_NSH_PROMPT_MAX - SUFFIX_MAX) + +/**************************************************************************** + * Private Variables + ****************************************************************************/ + +static char g_nshprompt[CONFIG_NSH_PROMPT_MAX] = CONFIG_NSH_PROMPT_STRING; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: nsh_update_prompt + * + * Description: + * This function updates g_nshprompt with latest data based on prioritized + * sources, from highest to lowest priority: + * + * - non-empty NSH_PROMPT_STRING w/o appending suffix + * - non-empty NSH_PROMPT_ENV variable value with suffix appended + * - non-empty HOSTNAME with g_prompt_suffix appended + * - g_prompt_suffix + * + * Results: + * - updated g_nsh_prompt value if necessary. + * + ****************************************************************************/ + +void nsh_update_prompt(void) +{ + size_t i; /* position to appending the suffix */ + + if (CONFIG_NSH_PROMPT_STRING[0] == '\0') + { +#ifndef CONFIG_DISABLE_ENVIRON + if (getenv(CONFIG_NSH_PROMPT_ENV)) + { + strlcpy(g_nshprompt, getenv(CONFIG_NSH_PROMPT_ENV), + sizeof(g_nshprompt)); + } + else +#endif + { + gethostname(g_nshprompt, sizeof(g_nshprompt)); + } + + i = MIN(strlen(g_nshprompt), PROMPT_MAX); + strlcpy(&g_nshprompt[i], CONFIG_NSH_PROMPT_SUFFIX, SUFFIX_MAX); Review Comment: ```suggestion strcat(g_nshprompt, CONFIG_NSH_PROMPT_SUFFIX); ``` and remove i ########## nshlib/Kconfig: ########## @@ -66,7 +66,38 @@ config NSH_PROMPT_STRING string "Prompt String" default "nsh> " ---help--- - Provide the shell prompt string, default is "nsh> ". + Provide the shell prompt string with size limit NSH_PROMPT_MAX. + default is "nsh> ". + +config NSH_PROMPT_MAX + int "Maximum Size of Prompt String" + default NAME_MAX + ---help--- + The maximum size of shell prompt string, including ending null. + +config NSH_PROMPT_ENV + string "Prompt String Environment Variable" + default "PS1" + depends on !DISABLE_ENVIRON + ---help--- + The environment variable name containing prompt string. + Only used when NSH_PROMPT_STRING is empty. + +config NSH_PROMPT_SUFFIX + string "Suffix used to derive fallback prompt string" + default "> " + ---help--- + When NSH_PROMPT_STRING is empty, the environment variable defined + by NSH_PROMPT_ENV or hostname will be used to derive the prompt string + at runtime. This suffix will be also used to clearly separate prompt + string from input commands. + +config NSH_PROMPT_SUFFIX_MAX Review Comment: why need NSH_PROMPT_SUFFIX_MAX? which can be computed from sizeof(CONFIG_NSH_PROMPT_SUFFIX) ########## nshlib/nsh_prompt.c: ########## @@ -0,0 +1,107 @@ +/**************************************************************************** + * apps/nshlib/nsh_prompt.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <string.h> +#include <stdlib.h> + +#ifndef CONFIG_NSH_CLE +# include "system/readline.h" +#endif + +#include "nsh.h" + +/**************************************************************************** + * Preprocessor Macros + ****************************************************************************/ + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define SUFFIX_MAX (CONFIG_NSH_PROMPT_SUFFIX_MAX) +#define PROMPT_MAX (CONFIG_NSH_PROMPT_MAX - SUFFIX_MAX) Review Comment: ```suggestion #define NSH_PROMPT_MAX (CONFIG_NSH_PROMPT_MAX - sizeof(CONFIG_NSH_PROMPT_SUFFIX) - 1) ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org