Changeset: ce317a8b57b2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce317a8b57b2 Modified Files: gdk/gdk_posix.c gdk/gdk_storage.c Branch: default Log Message:
Use truncate/ftruncate to extend a file. On Windows, use _chsize_s. diffs (87 lines): diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c --- a/gdk/gdk_posix.c +++ b/gdk/gdk_posix.c @@ -519,7 +519,6 @@ MT_mremap(const char *path, int mode, vo /* size not too big yet or * anonymous, try to make new * anonymous mmap and copy - * data over */ p = mmap(NULL, *new_size, prot, flags, fd, 0); @@ -544,9 +543,7 @@ MT_mremap(const char *path, int mode, vo return NULL; if (write(fd, old_address, old_size) < 0 || - lseek(fd, *new_size - 1, - SEEK_SET) < 0 || - write(fd, "\0", 1) < 0) { + ftruncate(fd, *new_size) < 0) { close(fd); return NULL; } diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c --- a/gdk/gdk_storage.c +++ b/gdk/gdk_storage.c @@ -242,11 +242,8 @@ GDKextendf(int fd, off_t size) return -1; } /* if necessary, extend the underlying file */ - if (stb.st_size < size && - (lseek(fd, size - 1, SEEK_SET) < 0 || - write(fd, "\0", 1) < 0)) { - return -1; - } + if (stb.st_size < size) + return ftruncate(fd, size); return 0; } #endif @@ -254,34 +251,26 @@ GDKextendf(int fd, off_t size) int GDKextend(const char *fn, size_t size) { - FILE *fp; int t0 = 0; IODEBUG t0 = GDKms(); - if ((fp = fopen(fn, "rb+")) == NULL) +#ifdef WIN32 + { + int fd, rt; + + if ((fd = open(fn, O_RDWR)) < 0) + return -1; + rt = _chsize_s(fd, (__int64) size); + close(fd); + if (rt != 0) + return -1; + } +#else + if (truncate(fn, (off_t) size) < 0) return -1; -#if defined(_WIN64) - if (_fseeki64(fp, (ssize_t) size - 1, SEEK_SET) < 0) - goto bailout; -#elif defined(HAVE_FSEEKO) - if (fseeko(fp, (off_t) size - 1, SEEK_SET) < 0) - goto bailout; -#else - if (fseek(fp, size - 1, SEEK_SET) < 0) - goto bailout; #endif - if (fputc('\n', fp) < 0) - goto bailout; - if (fflush(fp) < 0) - goto bailout; - if (fclose(fp) < 0) - return -1; IODEBUG fprintf(stderr, "#GDKextend %s " SZFMT " %dms\n", fn, size, GDKms() - t0); return 0; - bailout: - fclose(fp); - IODEBUG fprintf(stderr, "#GDKextend %s failed " SZFMT " %dms\n", fn, size, GDKms() - t0); - return -1; } /* _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list