diff options
Diffstat (limited to 'src/server/fileutil.c')
-rw-r--r-- | src/server/fileutil.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/server/fileutil.c b/src/server/fileutil.c index d41dc85..336ab68 100644 --- a/src/server/fileutil.c +++ b/src/server/fileutil.c @@ -58,11 +58,18 @@ bool file_alloc(int fd, uint64_t offset, uint64_t size) #elif defined(__FreeBSD__) if ( posix_fallocate( fd, offset, size ) == 0 ) return true; // slow way #endif + return false; +} + +bool file_setSize(int fd, uint64_t size) +{ + if ( ftruncate( fd, size ) == 0 ) return true; - /* This doesn't make any sense, AFAIK - if ( lseek( fd, offset + size - 1, SEEK_SET ) != (off_t)offset ) return false; // dumb way - if ( write( fd, "", 1 ) != 1 ) return false; - */ + // Try really hard... image loading logic relies on the file + // having the proper apparent size + uint8_t byte = 0; + pread( fd, &byte, 1, size - 1 ); + if ( pwrite( fd, &byte, 1, size - 1 ) == 1 ) return true; return false; } |