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 }