diff options
| author | jozan <jozan@noemail.net> | 2020-11-06 01:28:25 +0000 | 
|---|---|---|
| committer | jozan <jozan@noemail.net> | 2020-11-06 01:28:25 +0000 | 
| commit | 4c62287110a7b81769d6999950b4a27a3d0cc046 (patch) | |
| tree | 3b7b6729c3f019a269e7224a3b9b68cd941bde94 | |
| parent | Looks like I have to code well (diff) | |
| download | unixize-4c62287110a7b81769d6999950b4a27a3d0cc046.tar.gz unixize-4c62287110a7b81769d6999950b4a27a3d0cc046.tar.bz2 unixize-4c62287110a7b81769d6999950b4a27a3d0cc046.tar.xz unixize-4c62287110a7b81769d6999950b4a27a3d0cc046.tar.zst unixize-4c62287110a7b81769d6999950b4a27a3d0cc046.zip  | |
Recursion in progress
FossilOrigin-Name: 9acb0381b558565524c28866313ef303bca12cadc7def46d3a0efef91ffb8a81
Diffstat (limited to '')
| -rw-r--r-- | src/c_opts.c | 13 | ||||
| -rw-r--r-- | src/c_unixize.c | 13 | ||||
| -rw-r--r-- | src/c_unixize.h | 7 | ||||
| -rw-r--r-- | src/u_utils.c | 96 | ||||
| -rw-r--r-- | src/u_utils.h | 3 | 
5 files changed, 120 insertions, 12 deletions
diff --git a/src/c_opts.c b/src/c_opts.c index 6b163c7..c4efa73 100644 --- a/src/c_opts.c +++ b/src/c_opts.c @@ -88,14 +88,13 @@ c_get_opts   const char*	argv[])  {  	int opt; -	bool_t confirm; -	opts->recursive = FALSE; -	opts->verbose = FALSE; -	opts->pretend = FALSE; +	opts->confirm = FALSE;  	opts->hidden = FALSE;  	opts->hyphen = FALSE; -	confirm = FALSE; +	opts->pretend = FALSE; +	opts->recursive = FALSE; +	opts->verbose = FALSE;  	while ((opt = getopt(argc, (char *const *)argv, C_OPTS)) != -1) {  		if (opt == 'a') {  			opts->hidden = TRUE; @@ -105,7 +104,7 @@ c_get_opts  			exit(0);  		}  		else if (opt == 'i') { -			confirm = TRUE; +			opts->confirm = TRUE;  		}  		else if (opt == 'n') {  			opts->hyphen = TRUE; @@ -133,7 +132,7 @@ c_get_opts  	else if (argv[optind] == NULL) {  		strncpy(opts->dir, ".", 2 * sizeof(char));  	} -	if (confirm == TRUE) { +	if (opts->confirm == TRUE) {  		c_ask_confirm(opts->dir);  	}  	if (opts->pretend == TRUE) { diff --git a/src/c_unixize.c b/src/c_unixize.c index 5e92f71..bbf75f6 100644 --- a/src/c_unixize.c +++ b/src/c_unixize.c @@ -54,6 +54,7 @@  #include "c_lfiles.h"  #include "c_opts.h" +#include "c_unixize.h"  #include "u_utils.h"  int @@ -67,7 +68,7 @@ main  	struct lfiles_s* og_files_head;  	struct lfiles_s* new_files_head;  	int nargc; -	char* nargv; +	char** nargv;  	c_get_opts(&opts, argc, argv);  	if (chdir((const char*)opts.dir) == -1) { @@ -97,8 +98,14 @@ main  				u_dump_errno_path(og_files->filename);  			}  			else { -				/* rargc = u_get_rargv(&opts); */ -				main(nargc, (const char**)nargv); +				nargv = u_get_nargv(&opts); +				if (nargv != NULL) { +					nargc = 0; +					while (argv[nargc] != NULL) { +						nargc++; +					} +					main(nargc, (const char**)nargv); +				}  				chdir("../");  			}  		} diff --git a/src/c_unixize.h b/src/c_unixize.h index a43f887..965ff3f 100644 --- a/src/c_unixize.h +++ b/src/c_unixize.h @@ -48,12 +48,15 @@  #include <sys/param.h> -typedef enum bool_e { +typedef unsigned char bool_t; + +enum bool_e {  	FALSE,  	TRUE -} bool_t; +};  struct opts_s { +	bool_t	confirm;  	bool_t	hidden;  	bool_t	hyphen;  	bool_t	pretend; diff --git a/src/u_utils.c b/src/u_utils.c index cc7faeb..000cbca 100644 --- a/src/u_utils.c +++ b/src/u_utils.c @@ -49,6 +49,8 @@  #include <string.h>  #include <unistd.h> +#include "c_unixize.h" +  void  u_memdel(void** ptr)  { @@ -76,3 +78,97 @@ u_dump_errno_path(const char path[])  		strerror(errno)  	);  } + +static char +u_get_extra_args(char args[], struct opts_s* opts) +{ +	char i; + +	i = 0; +	args[0] = 0x00; +	if (opts->hidden == TRUE) { +		memcpy((char*)args + (i * 3), "-a:", 4 * sizeof(char)); +		i++; +	} +	if (opts->confirm == TRUE) { +		memcpy((char*)args + (i * 3), "-i:", 4 * sizeof(char)); +		i++; +	} +	if (opts->hyphen == TRUE) { +		memcpy((char*)args + (i * 3), "-n:", 4 * sizeof(char)); +		i++; +	} +	if (opts->pretend == TRUE) { +		memcpy((char*)args + (i * 3), "-p:", 4 * sizeof(char)); +		i++; +	} +	if (opts->verbose == TRUE) { +		memcpy((char*)args + (i * 3), "-v:", 4 * sizeof(char)); +		i++; +	} +	if (i > 0) { +		*(args + ((i - 2) * 3) - 1) = 0x00; +	} +	return (i); +} + +static void +u_del_nargv(char** nargv) +{ +	char** ptr; + +	ptr = nargv; +	while (*ptr != NULL) { +		ptr++; +	} +} + +char** +u_get_nargv(struct opts_s* opts) +{ +	short i; +	char args[19]; +	char** nargv; +	char* tok; + +	i = u_get_extra_args(args, opts) + 2; +	nargv = (char**)malloc((i + 1) * sizeof(char*)); +	if (nargv == NULL) { +		u_dump_errno(); +		return (NULL); +	} +	nargv[0] = strdup("unixize"); +	nargv[1] = NULL; +	if (nargv[0] == NULL) { +		u_memdel((void*)&nargv); +		return (NULL); +	} +	nargv[1] = strdup("-R"); +	nargv[2] = NULL; +	if (nargv[1] == NULL) { +		u_memdel((void*)&nargv[0]); +		u_memdel((void*)&nargv); +		return (NULL); +	} +	if (i > 2) { +		i = 2; +		tok = strtok(args, ":"); +		nargv[i] = strdup(tok); +		if (nargv[i] == NULL) { +			u_del_nargv(nargv); +			return (NULL); +		} +		nargv[i + 1] = NULL; +		while ((tok = strtok(NULL, ":")) != NULL) { +			nargv[i] = strdup(tok); +			if (nargv[i] == NULL) { +				u_del_nargv(nargv); +				return (NULL); +			} +			nargv[i + 1] = NULL; +			i++; +		} +	} +	exit(0); +	return (nargv); +} diff --git a/src/u_utils.h b/src/u_utils.h index 63e5075..4c298d6 100644 --- a/src/u_utils.h +++ b/src/u_utils.h @@ -43,6 +43,9 @@   * 2020-11-05 19:28   */ +#include "c_unixize.h" +  void	u_memdel(void**);  void	u_dump_errno(void);  void	u_dump_errno_path(const char[]); +char**	u_get_nargv(struct opts_s*);  | 
