env.c 964 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "sh.h"
  2. char *get_tenv(t_e *e, char *var)
  3. {
  4. int i;
  5. i = -1;
  6. while (e->env[++i] != NULL)
  7. if (ft_strcmp(e->env[i], var) == 61)
  8. return (ft_strchr(e->env[i], '=') + 1);
  9. return (NULL);
  10. }
  11. void ft_setenv(t_e *e, char *namevalue)
  12. {
  13. char **name;
  14. name = ft_strsplit(namevalue, '=');
  15. if (ft_search_pos_char(namevalue, '=') == -1 || \
  16. namevalue == NULL || isenv(name[0]) == 0)
  17. error_message("setenv use", "setenv ENV=env", NULL);
  18. else
  19. {
  20. if (get_tenv(e, name[0]) != NULL)
  21. del_env(e, name[0]);
  22. add_env(e, namevalue);
  23. }
  24. ft_tabdel(name);
  25. }
  26. void ft_unsetenv(t_e *e, char *name)
  27. {
  28. if (name == NULL || isenv(name) == 0)
  29. error_message("unsetenv use", "unsetenv ENV", NULL);
  30. else if (get_tenv(e, name) != NULL)
  31. del_env(e, name);
  32. }
  33. int isenv(char *str)
  34. {
  35. int i;
  36. i = -1;
  37. while (str[++i] != '\0')
  38. if (str[i] < 'A' || ('Z' < str[i] && str[i] < '_') ||
  39. ('_' < str[i] && str[i] < 'a') || str[i] > 'z')
  40. return (0);
  41. return (1);
  42. }