Get rid of fallocate on Windows
[fio.git] / os / windows / posix.c
index 67e71c8eabe57a0f2041c78a10cab9ac7c133ec0..de679111aaa300e36918fe58aa35a263ccca0546 100755 (executable)
@@ -408,53 +408,6 @@ char *basename(char *path)
        return name;
 }
 
-int posix_fallocate(int fd, off_t offset, off_t len)
-{
-       const int BUFFER_SIZE = 256 * 1024;
-       int rc = 0;
-       char *buf;
-       unsigned int write_len;
-       unsigned int bytes_written;
-       off_t bytes_remaining = len;
-
-       if (len == 0 || offset < 0)
-               return EINVAL;
-
-       buf = malloc(BUFFER_SIZE);
-
-       if (buf == NULL)
-               return ENOMEM;
-
-       memset(buf, 0, BUFFER_SIZE);
-
-       int64_t prev_pos = _telli64(fd);
-
-       if (_lseeki64(fd, offset, SEEK_SET) == -1)
-               return errno;
-
-       while (bytes_remaining > 0) {
-               if (bytes_remaining < BUFFER_SIZE)
-                       write_len = (unsigned int)bytes_remaining;
-               else
-                       write_len = BUFFER_SIZE;
-
-               bytes_written = _write(fd, buf, write_len);
-               if (bytes_written == -1) {
-                       rc = errno;
-                       break;
-               }
-
-               /* Don't allow Windows to cache the write: flush it to disk */
-               _commit(fd);
-
-               bytes_remaining -= bytes_written;
-       }
-
-       free(buf);
-       _lseeki64(fd, prev_pos, SEEK_SET);
-       return rc;
-}
-
 int ftruncate(int fildes, off_t length)
 {
        BOOL bSuccess;
@@ -547,11 +500,21 @@ int getrusage(int who, struct rusage *r_usage)
        const uint64_t SECONDS_BETWEEN_1601_AND_1970 = 11644473600;
        FILETIME cTime, eTime, kTime, uTime;
        time_t time;
+       HANDLE h;
 
        memset(r_usage, 0, sizeof(*r_usage));
 
-       HANDLE hProcess = GetCurrentProcess();
-       GetProcessTimes(hProcess, &cTime, &eTime, &kTime, &uTime);
+       if (who == RUSAGE_SELF) {
+               h = GetCurrentProcess();
+               GetProcessTimes(h, &cTime, &eTime, &kTime, &uTime);
+       } else if (who == RUSAGE_THREAD) {
+               h = GetCurrentThread();
+               GetThreadTimes(h, &cTime, &eTime, &kTime, &uTime);
+       } else {
+               log_err("fio: getrusage %d is not implemented\n", who);
+               return -1;
+       }
+
        time = ((uint64_t)uTime.dwHighDateTime << 32) + uTime.dwLowDateTime;
        /* Divide by 10,000,000 to get the number of seconds and move the epoch from
         * 1601 to 1970 */