#include <basis/guards.h>
#include <stdio.h>
+#include <sys/time.h>
#undef LOG
#define LOG(to_print) printf("%s::%s: %s\n", static_class_name(), func, astring(to_print).s())
// something malfunctioned. we should always be able to get back to
// the last good size we found if the file is static.
LOG(a_sprintf("failed to seek back to best highest %.0f on ",
- best_highest) + _real_file->filename());
+ best_highest) + _real_file->name());
// try to repair our ideas about the file by starting the process
// over.
//hmmm: count the number of times restarted and bail after N.
// the heck with this. we can't even go back to the start. this
// file seems to be screwed up now.
LOG(astring("failed to seek back to start of file! on ")
- + _real_file->filename());
+ + _real_file->name());
return 0;
}
// reset the rest of the positions for our failed attempt to return
return OKAY;
}
+basis::outcome huge_file::touch()
+{
+ if (filename(_real_file->name()).exists()) {
+ // file exists, so just update time.
+ int ret = utimes(_real_file->name().observe(), NIL);
+ if (ret != 0)
+ return FAILURE;
+ } else {
+ // file doesn't exist yet.
+ byte_array junk(1);
+ int written;
+ outcome ret = write(junk, written);
+ if (ret != OKAY) ret;
+ if (!truncate())
+ return FAILURE;
+ }
+ return OKAY;
+}
+
} //namespace.