Resort to returning const char ptrs to values
authorLukas Jiriste <ljiriste@student.42prague.com>
Sun, 21 Jul 2024 16:25:36 +0000 (18:25 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Sun, 21 Jul 2024 16:29:45 +0000 (18:29 +0200)
This makes the get_env_var_value unable to fail and the value does not
eed to be changed though pointer, the variable definition as a whole is
replaced during redefinition.

src/execution.c

index 0ba69df5aef2472f9214e1c5329aa3dc6ef2e5e4..4033c2353b27c89c4c5f1a337ac1eb7ffb8201ad 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/07/21 08:57:54 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/07/21 18:18:45 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/07/21 18:29:22 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -152,7 +152,7 @@ char        *get_var_name(const char *line)
        return (ft_strndup(line, i));
 }
 
-char   *get_var_value(const t_vec *vars, const char *var_name)
+const char     *get_var_value(const t_vec *vars, const char *var_name)
 {
        size_t          len;
        size_t          i;
@@ -164,18 +164,18 @@ char      *get_var_value(const t_vec *vars, const char *var_name)
        {
                line = ft_vec_caccess(vars, i);
                if (ft_strncmp(*line, var_name, len) && (*line)[len + 1] == '=')
-                       return (ft_strdup(*line + len + 2));
+                       return (*line + len + 2);
                ++i;
        }
-       return (ft_strdup(""));
+       return (NULL);
 }
 
-char   *get_env_var_value(const t_execution_env *env, const char *var_name)
+const char     *get_env_var_value(const t_execution_env *env, const char *var_name)
 {
-       char    *res;
+       const char      *res;
 
        res = get_var_value(&env->vars->other, var_name);
-       if (!res || res[0])
+       if (res)
                return (res);
        res = get_var_value(&env->vars->exported, var_name);
        return (res);
@@ -183,9 +183,9 @@ char        *get_env_var_value(const t_execution_env *env, const char *var_name)
 
 int    write_line_to_pipe(int pipe_fd, const char *line, const t_execution_env *env, int expand)
 {
-       size_t  i;
-       char    *var;
-       char    *value;
+       size_t          i;
+       char            *var;
+       const char      *value;
 
        i = 0;
        while (line[i])
@@ -201,17 +201,12 @@ int       write_line_to_pipe(int pipe_fd, const char *line, const t_execution_env *env
                if (!var)
                        return (1);
                value = get_env_var_value(env, var);
-               if (!value)
-               {
-                       free(var);
-                       return (1);
-               }
-               ft_dprintf(pipe_fd, "%s", value);
+               if (value)
+                       ft_dprintf(pipe_fd, "%s", value);
                i += ft_strlen(var);
                free(var);
-               free(value);
        }
-       return (0);;
+       return (0);
 }
 
 char   *unquote_delimiter(const char *str)