mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Run arguments through vis() as well when printing them.
This commit is contained in:
		
							
								
								
									
										30
									
								
								arguments.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								arguments.c
									
									
									
									
									
								
							@@ -22,6 +22,7 @@
 | 
				
			|||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <vis.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "tmux.h"
 | 
					#include "tmux.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,9 +131,10 @@ char *
 | 
				
			|||||||
args_print(struct args *args)
 | 
					args_print(struct args *args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	size_t		 	 len;
 | 
						size_t		 	 len;
 | 
				
			||||||
	char			*buf;
 | 
						char			*buf, *escaped;
 | 
				
			||||||
	int			 i;
 | 
						int			 i, flags;
 | 
				
			||||||
	struct args_entry	*entry;
 | 
						struct args_entry	*entry;
 | 
				
			||||||
 | 
						static const char	 quoted[] = " #\"';$";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	len = 1;
 | 
						len = 1;
 | 
				
			||||||
	buf = xcalloc(1, len);
 | 
						buf = xcalloc(1, len);
 | 
				
			||||||
@@ -156,20 +158,32 @@ args_print(struct args *args)
 | 
				
			|||||||
			args_print_add(&buf, &len, " -%c ", entry->flag);
 | 
								args_print_add(&buf, &len, " -%c ", entry->flag);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			args_print_add(&buf, &len, "-%c ", entry->flag);
 | 
								args_print_add(&buf, &len, "-%c ", entry->flag);
 | 
				
			||||||
		if (strchr(entry->value, ' ') != NULL)
 | 
					
 | 
				
			||||||
			args_print_add(&buf, &len, "\"%s\"", entry->value);
 | 
							flags = VIS_OCTAL|VIS_TAB|VIS_NL;
 | 
				
			||||||
 | 
							if (entry->value[strcspn(entry->value, quoted)] != '\0')
 | 
				
			||||||
 | 
								flags |= VIS_DQ;
 | 
				
			||||||
 | 
							stravis(&escaped, entry->value, flags);
 | 
				
			||||||
 | 
							if (flags & VIS_DQ)
 | 
				
			||||||
 | 
								args_print_add(&buf, &len, "\"%s\"", escaped);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			args_print_add(&buf, &len, "%s", entry->value);
 | 
								args_print_add(&buf, &len, "%s", escaped);
 | 
				
			||||||
 | 
							free(escaped);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* And finally the argument vector. */
 | 
						/* And finally the argument vector. */
 | 
				
			||||||
	for (i = 0; i < args->argc; i++) {
 | 
						for (i = 0; i < args->argc; i++) {
 | 
				
			||||||
		if (*buf != '\0')
 | 
							if (*buf != '\0')
 | 
				
			||||||
			args_print_add(&buf, &len, " ");
 | 
								args_print_add(&buf, &len, " ");
 | 
				
			||||||
		if (strchr(args->argv[i], ' ') != NULL)
 | 
					
 | 
				
			||||||
			args_print_add(&buf, &len, "\"%s\"", args->argv[i]);
 | 
							flags = VIS_OCTAL|VIS_TAB|VIS_NL;
 | 
				
			||||||
 | 
							if (args->argv[i][strcspn(args->argv[i], quoted)] != '\0')
 | 
				
			||||||
 | 
								flags |= VIS_DQ;
 | 
				
			||||||
 | 
							stravis(&escaped, args->argv[i], flags);
 | 
				
			||||||
 | 
							if (flags & VIS_DQ)
 | 
				
			||||||
 | 
								args_print_add(&buf, &len, "\"%s\"", escaped);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			args_print_add(&buf, &len, "%s", args->argv[i]);
 | 
								args_print_add(&buf, &len, "%s", escaped);
 | 
				
			||||||
 | 
							free(escaped);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return (buf);
 | 
						return (buf);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user