ft_take_opts.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* ************************************************************************** */
  2. /* */
  3. /* ::: :::::::: */
  4. /* ft_take_opts.c :+: :+: :+: */
  5. /* +:+ +:+ +:+ */
  6. /* By: bchanot <bchanot@student.42.fr> +#+ +:+ +#+ */
  7. /* +#+#+#+#+#+ +#+ */
  8. /* Created: 2018/01/04 20:23:10 by bchanot #+# #+# */
  9. /* Updated: 2018/10/14 03:22:26 by bchanot ### ########.fr */
  10. /* */
  11. /* ************************************************************************** */
  12. #include "libft.h"
  13. t_bool ft_check_opts(char **tab, const char *opt)
  14. {
  15. size_t i;
  16. if (!tab)
  17. return (false);
  18. i = 0;
  19. while (tab[i])
  20. {
  21. if (ft_strlen(opt) > 1)
  22. {
  23. if (!ft_strncmp(tab[i], "--", 2) &&
  24. !ft_strcmp(tab[i] + 2, opt))
  25. return (true);
  26. }
  27. else
  28. {
  29. if (ft_strncmp(tab[i], "--", 2))
  30. {
  31. if (ft_cptchar(tab[i], *opt) > 0)
  32. return (true);
  33. }
  34. }
  35. i++;
  36. }
  37. return (false);
  38. }
  39. static char **ft_get_opts_begin(int ac, char **av, char **tab)
  40. {
  41. size_t index;
  42. int i;
  43. i = 0;
  44. index = 0;
  45. while (i < ac)
  46. {
  47. if (av[i][0] == '-')
  48. {
  49. if (av[i][1] && av[i][1] == '-' && av[i][2] == 0)
  50. break ;
  51. else if (av[i][1])
  52. {
  53. tab[index] = ft_strdup(av[i]);
  54. index++;
  55. }
  56. }
  57. else
  58. break ;
  59. i++;
  60. }
  61. tab[index] = 0;
  62. return (tab);
  63. }
  64. char **ft_take_opts_begin(int ac, char **av)
  65. {
  66. size_t index;
  67. char **tab;
  68. int i;
  69. i = 0;
  70. index = 0;
  71. if (ac < 1)
  72. return (NULL);
  73. while (i < ac)
  74. {
  75. if (av[i][0] == '-')
  76. {
  77. if (av[i][1] && av[i][1] == '-' && av[i][2] == 0)
  78. break ;
  79. index++;
  80. }
  81. else
  82. break ;
  83. i++;
  84. }
  85. if (!(tab = (char **)ft_memalloc(sizeof(char *) * (index + 1))))
  86. return (NULL);
  87. return (ft_get_opts_begin(ac, av, tab));
  88. }