/ push_swap / push_swap / ps_param_utils.c
ps_param_utils.c
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   param_utils.c                                      :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2022/11/05 18:08:50 by gychoi            #+#    #+#             */
 9  /*   Updated: 2022/12/07 20:40:41 by gychoi           ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  #include "push_swap.h"
14  
15  static int	ps_atoi(char *a)
16  {
17  	int			i;
18  	int			sign;
19  	int			digit_flag;
20  	long long	value;
21  
22  	i = 0;
23  	sign = 1;
24  	if (a[i] == '-' || a[i] == '+')
25  	{
26  		if (a[i++] == '-')
27  			sign *= -1;
28  	}
29  	value = 0;
30  	digit_flag = 0;
31  	while (('0' <= a[i] && a[i] <= '9') && a[i] != '\0')
32  	{
33  		value = value * 10 + sign * (a[i++] - '0');
34  		if (2147483647 < value || value < -2147483648)
35  			ps_error();
36  		digit_flag = 1;
37  	}
38  	if (!digit_flag || a[i] != '\0')
39  		ps_error();
40  	return ((int)value);
41  }
42  
43  static void	fill_array(int *array, int argc, char **argv)
44  {
45  	int	i;
46  
47  	i = 0;
48  	while (i < argc - 1)
49  	{
50  		array[i] = ps_atoi(argv[i + 1]);
51  		i++;
52  	}
53  }
54  
55  static void	check_duplicate(int *array, int argc)
56  {
57  	int	i;
58  	int	j;
59  
60  	i = 0;
61  	while (i < argc - 2)
62  	{
63  		j = i + 1;
64  		while (j < argc - 1)
65  		{
66  			if (array[i] == array[j])
67  				ps_error();
68  			j++;
69  		}
70  		i++;
71  	}
72  }
73  
74  int	*get_valid_param(int argc, char **argv)
75  {
76  	int	*array;
77  
78  	array = (int *)malloc(sizeof(int) * (argc - 1));
79  	if (array == NULL)
80  		exit(1);
81  	fill_array(array, argc, argv);
82  	check_duplicate(array, argc);
83  	return (array);
84  }