
Путь: Toys/Other, команды версии: Ver.4 Ver.9 truncate Комментарии в файле truncate.c :
Исходный текст в файле truncate.c #define FOR_truncate
#include "toys.h"
GLOBALS(
char *s;
long size;
int type;
)
static void do_truncate(int fd, char *name)
{
long long size;
if (fd<0) return;
if (TT.type == -1) size = TT.size;
else {
size = fdlength(fd);
if (TT.type<2) size += TT.size*(1-(2*TT.type));
else if (TT.type<4) {
if ((TT.type==2) ? (size <= TT.size) : (size >= TT.size)) return;
size = TT.size;
} else {
size = (size+(TT.type-4)*(TT.size-1))/TT.size;
size *= TT.size;
}
}
if (ftruncate(fd, size)) perror_msg("'%s' to '%lld'", name, size);
}
void truncate_main(void)
{
int cr = !FLAG(c);
if (-1 != (TT.type = stridx("+-<>/%", *TT.s))) TT.s++;
TT.size = atolx(TT.s);
// Create files with mask rwrwrw.
// Nonexistent files are only an error if we're supposed to create them.
loopfiles_rw(toys.optargs, O_WRONLY|O_CLOEXEC|(cr ? O_CREAT|WARN_ONLY : 0),
0666, do_truncate);
} |
![]() |