refactor: refactor validargs.c, make it neater
This commit is contained in:
		
							parent
							
								
									a8230d70d3
								
							
						
					
					
						commit
						3d7131a43e
					
				| 
						 | 
					@ -4,6 +4,9 @@
 | 
				
			||||||
#include "global.h"
 | 
					#include "global.h"
 | 
				
			||||||
#include "debug.h"
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int parse_arg(char *arg);
 | 
				
			||||||
 | 
					int str2int(char *arg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Validates command line arguments passed to the program.
 | 
					 * @brief Validates command line arguments passed to the program.
 | 
				
			||||||
 * @details This function will validate all the arguments passed to the
 | 
					 * @details This function will validate all the arguments passed to the
 | 
				
			||||||
| 
						 | 
					@ -23,104 +26,106 @@
 | 
				
			||||||
int validargs(int argc, char **argv)
 | 
					int validargs(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    global_options = 0;
 | 
					    global_options = 0;
 | 
				
			||||||
 | 
					    int isValid = 0;
 | 
				
			||||||
    char **ptr = argv;
 | 
					    char **ptr = argv;
 | 
				
			||||||
    ptr++;
 | 
					    switch (parse_arg(*(++ptr)))
 | 
				
			||||||
    for (int i = 1; i < argc; i++, ptr++)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (**ptr == '-')
 | 
					    case 8:
 | 
				
			||||||
 | 
					        global_options = HELP_OPTION;
 | 
				
			||||||
 | 
					        isValid = 1;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case 4:
 | 
				
			||||||
 | 
					        if (argc == 2)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            char *arg = *ptr;
 | 
					            global_options = VALIDATE_OPTION;
 | 
				
			||||||
            arg++;
 | 
					            isValid = 1;
 | 
				
			||||||
            switch (*arg)
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (parse_arg(*(++ptr)) == -1)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            case 'h':
 | 
					                global_options = VALIDATE_OPTION;
 | 
				
			||||||
                if (i == 1 && *(++arg) == '\0')
 | 
					                isValid = 1;
 | 
				
			||||||
                {
 | 
					            }
 | 
				
			||||||
                    global_options = HELP_OPTION;
 | 
					        }
 | 
				
			||||||
                    return 0;
 | 
					        break;
 | 
				
			||||||
                }
 | 
					    case 2:
 | 
				
			||||||
                else
 | 
					        if (argc == 2)
 | 
				
			||||||
                {
 | 
					        {
 | 
				
			||||||
                    return -1;
 | 
					            global_options = CANONICALIZE_OPTION;
 | 
				
			||||||
                }
 | 
					            isValid = 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            switch (parse_arg(*(++ptr)))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					            case -1:
 | 
				
			||||||
 | 
					                global_options = CANONICALIZE_OPTION;
 | 
				
			||||||
 | 
					                isValid = 1;
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 'v':
 | 
					            case 1:
 | 
				
			||||||
                if (i == 1 && *(++arg) == '\0' && argc == 2)
 | 
					                global_options = CANONICALIZE_OPTION + PRETTY_PRINT_OPTION + str2int(*(++ptr));
 | 
				
			||||||
                {
 | 
					                isValid = 1;
 | 
				
			||||||
                    global_options = VALIDATE_OPTION;
 | 
					 | 
				
			||||||
                    return 0;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    return -1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 'c':
 | 
					 | 
				
			||||||
                if (i == 1 && *(++arg) == '\0')
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (argc == 2)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        global_options = CANONICALIZE_OPTION;
 | 
					 | 
				
			||||||
                        return 0;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ptr++;
 | 
					 | 
				
			||||||
                        if (**ptr != '-')
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        arg = *ptr;
 | 
					 | 
				
			||||||
                        if (*(++arg) != 'p')
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        if (*(++arg) != '\0')
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        if (argc == 3)
 | 
					 | 
				
			||||||
                        {    
 | 
					 | 
				
			||||||
                            global_options = PRETTY_PRINT_OPTION;
 | 
					 | 
				
			||||||
                            global_options += 4;
 | 
					 | 
				
			||||||
                            return 0;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        else if (argc == 4)
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            global_options = PRETTY_PRINT_OPTION;
 | 
					 | 
				
			||||||
                            int indent_value = 0;
 | 
					 | 
				
			||||||
                            arg = *(++ptr);
 | 
					 | 
				
			||||||
                            while (*arg != '\0')
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                if (*arg <= '9' && *arg >= '0')
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    indent_value = indent_value * 10 + (*arg - '0');
 | 
					 | 
				
			||||||
                                    arg++;
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                                else
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    return 1;
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            global_options += indent_value;
 | 
					 | 
				
			||||||
                            return 0;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        else
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    return -1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            default:
 | 
					            default:
 | 
				
			||||||
                return -1;
 | 
					 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (isValid)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int parse_arg(char *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int ans = -1;
 | 
				
			||||||
 | 
					    if (*arg == '-')
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        char arg1 = *(++arg), arg2 = *(++arg);
 | 
				
			||||||
 | 
					        if (arg2 == '\0')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (arg1 == 'h')
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ans = 8;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (arg1 == 'v')
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ans = 4;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (arg1 == 'c')
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ans = 2;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (arg1 == 'p')
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ans = 1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return ans;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int str2int(char *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int ans = 0;
 | 
				
			||||||
 | 
					    while (*arg != '\0')
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (*arg <= '9' && *arg >= '0')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ans = ans * 10 + (*arg - '0');
 | 
				
			||||||
 | 
					            arg++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ans = 4;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return ans;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user