diff options
Diffstat (limited to 'src/implementation.c')
| -rw-r--r-- | src/implementation.c | 51 | 
1 files changed, 25 insertions, 26 deletions
| diff --git a/src/implementation.c b/src/implementation.c index fb279fc..af9f79d 100644 --- a/src/implementation.c +++ b/src/implementation.c @@ -31,42 +31,41 @@  #include "xstd.h"  #include "easydir.h"  #include "r-gpgme.h" +#if defined(DISPLAY) +	#include "r-x11.h" +#endif  /* define in implementation.h */  // GPG_PUBLICKEY_MAXLENGTH NNNN - -void copy_outside(char *password) +int copy_outside(char *password)  { -	char *simple_path = malloc(sizeof(char) * (5 + 1)); -	strcpy(simple_path, ".pass"); +	#if defined(DISPLAY) +		int pid; +		pid = fork(); +		if(pid == -1) +			errprint(1, "X11 fork() failed\n"); +		if(pid == 0) /* new process */ +			exit(run_clipboard(password)); +		return 0; +	#endif -	if(getenv("DISPLAY") != NULL) -	{ -		FILE *f_pass; -		f_pass = fopen(simple_path, "w"); -		if(f_pass == NULL) { -			callError(130); +	if(getenv("WAYLAND_DISPLAY") != NULL) { +		char * const wl_copy[] = {"wl-copy", password, NULL}; +		int pid; +		pid = fork(); +		if(pid == -1) +			errprint(1, "Wayland fork() failed\n"); +		if(pid == 0) { /* new process */ +			execvp("wl-copy", wl_copy); +			perror("wl-copy"); +			exit(1);  		} -		fputs(password, f_pass); -		fclose(f_pass); - -		char *xclip[] = {"xclip", "-selection", "clipboard", "-i", simple_path, NULL}; -		easyFork("xclip", xclip); -		remove(simple_path); -		free(simple_path); +		return 0;  	} -	else if(getenv("WAYLAND_DISPLAY") != NULL) -	{ -		char *wl_copy[] = {"wl-copy", password, NULL}; -		easyFork("wl-copy", wl_copy); -	} -	else printError("Error: No X11 or Wayland"); -	#if defined(DEBUG) -	  	printf("Password copied to clipboard\n"); -	#endif +	errprint(1, "You didn't have x11 or wayland when app builded\n");  }  /* check two dot in path */ | 
