sort: don't evaluate if clause
this fixes that you could specify a key definition like "-k 1.2.3", which is incorrect.
This commit is contained in:
		
							
								
								
									
										7
									
								
								sort.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								sort.c
									
									
									
									
									
								
							@@ -103,7 +103,7 @@ addkeydef(char *def)
 | 
				
			|||||||
	if(!head)
 | 
						if(!head)
 | 
				
			||||||
		head = node;
 | 
							head = node;
 | 
				
			||||||
	if(parse_keydef(&node->keydef, def))
 | 
						if(parse_keydef(&node->keydef, def))
 | 
				
			||||||
		enprintf(2, "parse_keydef:");
 | 
							enprintf(2, "faulty key definition\n");
 | 
				
			||||||
	if(curr)
 | 
						if(curr)
 | 
				
			||||||
		curr->next = node;
 | 
							curr->next = node;
 | 
				
			||||||
	node->next = NULL;
 | 
						node->next = NULL;
 | 
				
			||||||
@@ -155,6 +155,7 @@ static int
 | 
				
			|||||||
parse_keydef(struct keydef *kd, char *s)
 | 
					parse_keydef(struct keydef *kd, char *s)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char *rest = s;
 | 
						char *rest = s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kd->start_column = 1;
 | 
						kd->start_column = 1;
 | 
				
			||||||
	kd->start_char = 1;
 | 
						kd->start_char = 1;
 | 
				
			||||||
	/* 0 means end of line */
 | 
						/* 0 means end of line */
 | 
				
			||||||
@@ -170,9 +171,9 @@ parse_keydef(struct keydef *kd, char *s)
 | 
				
			|||||||
		kd->end_column = strtoul(rest+1, &rest, 10);
 | 
							kd->end_column = strtoul(rest+1, &rest, 10);
 | 
				
			||||||
		if(kd->end_column < kd->start_column)
 | 
							if(kd->end_column < kd->start_column)
 | 
				
			||||||
			enprintf(2, ",%u is too small\n", kd->end_column);
 | 
								enprintf(2, ",%u is too small\n", kd->end_column);
 | 
				
			||||||
 | 
							if(*rest == '.')
 | 
				
			||||||
 | 
								kd->end_char = strtoul(rest+1, &rest, 10);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(*rest == '.')
 | 
					 | 
				
			||||||
		kd->end_char = strtoul(rest+1, &rest, 10);
 | 
					 | 
				
			||||||
	if(*rest != '\0')
 | 
						if(*rest != '\0')
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user