#!/usr/bin/tcc -run #include #include #include #include #include #include #include /* Remoe 0xff bytes from the end of argv[1] */ int main(int argc, char** argv) { int fd; struct stat s; char *m; size_t i; argc >= 2 || err(EX_USAGE, "usage: dstrim file"); (fd = open(argv[1], O_RDWR)) > 0 || err(EX_NOINPUT, "open"); fstat(fd, &s) == 0 || err(EX_NOINPUT, "fstat"); (m = mmap(NULL, s.st_size, PROT_READ, MAP_SHARED, fd, 0)) != MAP_FAILED || err(EX_NOINPUT, "mmap"); for(i = s.st_size - 1; i > 0 && m[i] == '\xff'; --i); printf("File size:\t%9d\nData size:\t%9d\nJunk space:\t%9d\n", s.st_size, i+1, s.st_size - (i+1) ); munmap(m, s.st_size) == 0 || err(EX_OSERR, "munmap"); ftruncate(fd, i+1) == 0 || err(EX_OSERR, "truncate"); close(fd) == 0 || err(EX_OSERR, "close"); }