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:
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)
|
static int readLines(const char *file, int num)
|
||||||
{
|
{
|
||||||
int fd, cc;
|
int fd, cc;
|
||||||
int len, lineCount, charCount;
|
int len;
|
||||||
|
unsigned charCount;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
|
||||||
if ((num < 1) || (num > lastNum + 1)) {
|
if ((num < 1) || (num > lastNum + 1)) {
|
||||||
@ -396,7 +397,6 @@ static int readLines(const char *file, int num)
|
|||||||
|
|
||||||
bufPtr = bufBase;
|
bufPtr = bufBase;
|
||||||
bufUsed = 0;
|
bufUsed = 0;
|
||||||
lineCount = 0;
|
|
||||||
charCount = 0;
|
charCount = 0;
|
||||||
cc = 0;
|
cc = 0;
|
||||||
|
|
||||||
@ -415,7 +415,6 @@ static int readLines(const char *file, int num)
|
|||||||
bufPtr += len;
|
bufPtr += len;
|
||||||
bufUsed -= len;
|
bufUsed -= len;
|
||||||
charCount += len;
|
charCount += len;
|
||||||
lineCount++;
|
|
||||||
num++;
|
num++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -449,15 +448,18 @@ static int readLines(const char *file, int num)
|
|||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
lineCount++;
|
|
||||||
charCount += bufUsed;
|
charCount += bufUsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
printf("%d lines%s, %d chars\n", lineCount,
|
/* https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html
|
||||||
(bufUsed ? " (incomplete)" : ""), charCount);
|
* "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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -468,12 +470,12 @@ static int readLines(const char *file, int num)
|
|||||||
static int writeLines(const char *file, int num1, int num2)
|
static int writeLines(const char *file, int num1, int num2)
|
||||||
{
|
{
|
||||||
LINE *lp;
|
LINE *lp;
|
||||||
int fd, lineCount, charCount;
|
int fd;
|
||||||
|
unsigned charCount;
|
||||||
|
|
||||||
if (bad_nums(num1, num2, "write"))
|
if (bad_nums(num1, num2, "write"))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
lineCount = 0;
|
|
||||||
charCount = 0;
|
charCount = 0;
|
||||||
|
|
||||||
fd = creat(file, 0666);
|
fd = creat(file, 0666);
|
||||||
@ -482,9 +484,6 @@ static int writeLines(const char *file, int num1, int num2)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\"%s\", ", file);
|
|
||||||
fflush_all();
|
|
||||||
|
|
||||||
lp = findLine(num1);
|
lp = findLine(num1);
|
||||||
if (lp == NULL) {
|
if (lp == NULL) {
|
||||||
close(fd);
|
close(fd);
|
||||||
@ -498,7 +497,6 @@ static int writeLines(const char *file, int num1, int num2)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
charCount += lp->len;
|
charCount += lp->len;
|
||||||
lineCount++;
|
|
||||||
lp = lp->next;
|
lp = lp->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,7 +505,13 @@ static int writeLines(const char *file, int num1, int num2)
|
|||||||
return FALSE;
|
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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user