mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	linux.c: update the default path retrieval
- added system_default_directory()
- both system_default_directory() and system_default_filename()
  now use the helper system_default_path_append()
- less safer compared to windows.c, assuming the OS is stricter on which
  environment variables exist!
[Dirk Hohndel: switched filename to be dynamically allocated to avoid
               possible buffer overflow]
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
			
			
This commit is contained in:
		
							parent
							
								
									ed98d3bc60
								
							
						
					
					
						commit
						e8a868aae2
					
				
					 1 changed files with 42 additions and 12 deletions
				
			
		
							
								
								
									
										54
									
								
								linux.c
									
										
									
									
									
								
							
							
						
						
									
										54
									
								
								linux.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -48,24 +48,54 @@ void subsurface_user_info(struct user_info *user)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *system_default_filename(void)
 | 
			
		||||
static const char *system_default_path_append(const char *append)
 | 
			
		||||
{
 | 
			
		||||
	const char *home, *user;
 | 
			
		||||
	char *buffer;
 | 
			
		||||
	int len;
 | 
			
		||||
 | 
			
		||||
	home = getenv("HOME");
 | 
			
		||||
	const char *home = getenv("HOME");
 | 
			
		||||
	if (!home)
 | 
			
		||||
		home = "~";
 | 
			
		||||
	user = getenv("LOGNAME");
 | 
			
		||||
	if (!user)
 | 
			
		||||
		user = "default";
 | 
			
		||||
	len = strlen(home) + strlen(user) + 17;
 | 
			
		||||
	buffer = malloc(len);
 | 
			
		||||
	snprintf(buffer, len, "%s/subsurface/%s.xml", home, user);
 | 
			
		||||
	const char *path = "/subsurface";
 | 
			
		||||
 | 
			
		||||
	int len = strlen(home) + strlen(path) + 1;
 | 
			
		||||
	if (append)
 | 
			
		||||
		len += strlen(append) + 1;
 | 
			
		||||
 | 
			
		||||
	char *buffer = (char *)malloc(len);
 | 
			
		||||
	memset(buffer, 0, len);
 | 
			
		||||
	strcat(buffer, home);
 | 
			
		||||
	strcat(buffer, path);
 | 
			
		||||
	if (append) {
 | 
			
		||||
		strcat(buffer, "/");
 | 
			
		||||
		strcat(buffer, append);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *system_default_directory(void)
 | 
			
		||||
{
 | 
			
		||||
	static const char *path = NULL;
 | 
			
		||||
	if (!path)
 | 
			
		||||
		path = system_default_path_append(NULL);
 | 
			
		||||
	return path;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *system_default_filename(void)
 | 
			
		||||
{
 | 
			
		||||
	static char *filename = NULL;
 | 
			
		||||
	if (!filename) {
 | 
			
		||||
		const char *user = getenv("LOGNAME");
 | 
			
		||||
		if (same_string(user, ""))
 | 
			
		||||
			user = "username";
 | 
			
		||||
		filename = malloc(strlen(user) + 5);
 | 
			
		||||
		strcat(filename, user);
 | 
			
		||||
		strcat(filename, ".xml");
 | 
			
		||||
	}
 | 
			
		||||
	static const char *path = NULL;
 | 
			
		||||
	if (!path)
 | 
			
		||||
		path = system_default_path_append(filename);
 | 
			
		||||
	return path;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
 | 
			
		||||
{
 | 
			
		||||
	int index = -1, entries = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue