make path expansion match docu: paths are relative to ~
the current behavior of being relative to the current directory sort of makes no sense, and contradicts the docu.
This commit is contained in:
		
							parent
							
								
									312f4be4b2
								
							
						
					
					
						commit
						da5ce5d8f4
					
				
					 2 changed files with 14 additions and 3 deletions
				
			
		|  | @ -219,7 +219,7 @@ getopt_helper( conffile_t *cfile, int *cops, int ops[], char **sync_state ) | ||||||
| 		while ((arg = get_arg( cfile, ARG_OPTIONAL, 0 ))); | 		while ((arg = get_arg( cfile, ARG_OPTIONAL, 0 ))); | ||||||
| 		ops[M] |= XOP_HAVE_CREATE; | 		ops[M] |= XOP_HAVE_CREATE; | ||||||
| 	} else if (!strcasecmp( "SyncState", cfile->cmd )) | 	} else if (!strcasecmp( "SyncState", cfile->cmd )) | ||||||
| 		*sync_state = expand_strdup( cfile->val ); | 		*sync_state = !strcmp( cfile->val, "*" ) ? nfstrdup( "*" ) : expand_strdup( cfile->val ); | ||||||
| 	else | 	else | ||||||
| 		return 0; | 		return 0; | ||||||
| 	return 1; | 	return 1; | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/util.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/util.c
									
										
									
									
									
								
							|  | @ -337,24 +337,35 @@ expand_strdup( const char *s ) | ||||||
| 	if (*s == '~') { | 	if (*s == '~') { | ||||||
| 		s++; | 		s++; | ||||||
| 		if (!*s) { | 		if (!*s) { | ||||||
|  | 		  rethome: | ||||||
| 			p = 0; | 			p = 0; | ||||||
| 			q = Home; | 			q = Home; | ||||||
| 		} else if (*s == '/') { | 		} else if (*s == '/') { | ||||||
| 			p = s; | 			p = s + 1; | ||||||
| 			q = Home; | 			q = Home; | ||||||
| 		} else { | 		} else { | ||||||
| 			if ((p = strchr( s, '/' ))) { | 			if ((p = strchr( s, '/' ))) { | ||||||
| 				r = my_strndup( s, (int)(p - s) ); | 				r = my_strndup( s, (int)(p - s) ); | ||||||
| 				pw = getpwnam( r ); | 				pw = getpwnam( r ); | ||||||
| 				free( r ); | 				free( r ); | ||||||
|  | 				p++; | ||||||
| 			} else | 			} else | ||||||
| 				pw = getpwnam( s ); | 				pw = getpwnam( s ); | ||||||
| 			if (!pw) | 			if (!pw) | ||||||
| 				return 0; | 				return 0; | ||||||
| 			q = pw->pw_dir; | 			q = pw->pw_dir; | ||||||
| 		} | 		} | ||||||
| 		nfasprintf( &r, "%s%s", q, p ? p : "" ); | 		if (!p) | ||||||
|  | 			return nfstrdup( q ); | ||||||
|  | 	  retjoin: | ||||||
|  | 		nfasprintf( &r, "%s/%s", q, p ); | ||||||
| 		return r; | 		return r; | ||||||
|  | 	} else if (*s != '/') { | ||||||
|  | 		if (*s == '.' && !s[1]) | ||||||
|  | 			goto rethome; | ||||||
|  | 		p = s; | ||||||
|  | 		q = Home; | ||||||
|  | 		goto retjoin; | ||||||
| 	} else | 	} else | ||||||
| 		return nfstrdup( s ); | 		return nfstrdup( s ); | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue