ed: align output of read/write commands with POSIX-1.2008
POSIX.1-2008 mandates the following regarding the write command: If the command is successful, the number of bytes written shall be written to standard output, unless the -s option was specified, in the following format: "%d\n", <number of bytes written> function old new delta readLines 447 409 -38 doCommands 1940 1889 -51 .rodata 104219 104163 -56 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-145) Total: -145 bytes Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							94c78aa0b9
						
					
				
				
					commit
					c33bbcb92f
				
			
							
								
								
									
										32
									
								
								editors/ed.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								editors/ed.c
									
									
									
									
									
								
							@@ -380,7 +380,8 @@ static void addLines(int num)
 | 
			
		||||
static int readLines(const char *file, int num)
 | 
			
		||||
{
 | 
			
		||||
	int fd, cc;
 | 
			
		||||
	int len, lineCount, charCount;
 | 
			
		||||
	int len;
 | 
			
		||||
	unsigned charCount;
 | 
			
		||||
	char *cp;
 | 
			
		||||
 | 
			
		||||
	if ((num < 1) || (num > lastNum + 1)) {
 | 
			
		||||
@@ -396,7 +397,6 @@ static int readLines(const char *file, int num)
 | 
			
		||||
 | 
			
		||||
	bufPtr = bufBase;
 | 
			
		||||
	bufUsed = 0;
 | 
			
		||||
	lineCount = 0;
 | 
			
		||||
	charCount = 0;
 | 
			
		||||
	cc = 0;
 | 
			
		||||
 | 
			
		||||
@@ -415,7 +415,6 @@ static int readLines(const char *file, int num)
 | 
			
		||||
			bufPtr += len;
 | 
			
		||||
			bufUsed -= len;
 | 
			
		||||
			charCount += len;
 | 
			
		||||
			lineCount++;
 | 
			
		||||
			num++;
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
@@ -449,15 +448,18 @@ static int readLines(const char *file, int num)
 | 
			
		||||
			close(fd);
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
		lineCount++;
 | 
			
		||||
		charCount += bufUsed;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	printf("%d lines%s, %d chars\n", lineCount,
 | 
			
		||||
		(bufUsed ? " (incomplete)" : ""), charCount);
 | 
			
		||||
 | 
			
		||||
	/* https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html
 | 
			
		||||
	 * "Read Command"
 | 
			
		||||
	 * "...the number of bytes read shall be written to standard output
 | 
			
		||||
	 * in the following format:
 | 
			
		||||
	 * "%d\n", <number of bytes read>
 | 
			
		||||
	 */
 | 
			
		||||
	printf("%u\n", charCount);
 | 
			
		||||
	return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -468,12 +470,12 @@ static int readLines(const char *file, int num)
 | 
			
		||||
static int writeLines(const char *file, int num1, int num2)
 | 
			
		||||
{
 | 
			
		||||
	LINE *lp;
 | 
			
		||||
	int fd, lineCount, charCount;
 | 
			
		||||
	int fd;
 | 
			
		||||
	unsigned charCount;
 | 
			
		||||
 | 
			
		||||
	if (bad_nums(num1, num2, "write"))
 | 
			
		||||
		return FALSE;
 | 
			
		||||
 | 
			
		||||
	lineCount = 0;
 | 
			
		||||
	charCount = 0;
 | 
			
		||||
 | 
			
		||||
	fd = creat(file, 0666);
 | 
			
		||||
@@ -482,9 +484,6 @@ static int writeLines(const char *file, int num1, int num2)
 | 
			
		||||
		return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf("\"%s\", ", file);
 | 
			
		||||
	fflush_all();
 | 
			
		||||
 | 
			
		||||
	lp = findLine(num1);
 | 
			
		||||
	if (lp == NULL) {
 | 
			
		||||
		close(fd);
 | 
			
		||||
@@ -498,7 +497,6 @@ static int writeLines(const char *file, int num1, int num2)
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		}
 | 
			
		||||
		charCount += lp->len;
 | 
			
		||||
		lineCount++;
 | 
			
		||||
		lp = lp->next;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -507,7 +505,13 @@ static int writeLines(const char *file, int num1, int num2)
 | 
			
		||||
		return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf("%d lines, %d chars\n", lineCount, charCount);
 | 
			
		||||
	/* https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html
 | 
			
		||||
	 * "Write Command"
 | 
			
		||||
	 * "...the number of bytes written shall be written to standard output,
 | 
			
		||||
	 * unless the -s option was specified, in the following format:
 | 
			
		||||
	 * "%d\n", <number of bytes written>
 | 
			
		||||
	 */
 | 
			
		||||
	printf("%u\n", charCount);
 | 
			
		||||
	return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user