From 3c83f778aaea475cc3c68d0bab7b63e8427ced1b Mon Sep 17 00:00:00 2001 From: Chris Koeritz Date: Wed, 1 May 2013 15:16:45 -0400 Subject: [PATCH] updates getting us closer to working on windows. added a highly speculative implementation of touch in huge_file, which may not be right because windows file handling seems to continue to suck the chrome off of bumpers. --- nucleus/library/filesystem/huge_file.cpp | 26 +++++++++++++++++++++++- scripts/clam/cpp/variables.def | 3 ++- scripts/generator/wrapdoze.sh | 12 +++++------ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/nucleus/library/filesystem/huge_file.cpp b/nucleus/library/filesystem/huge_file.cpp index f452fd30..21158ca4 100644 --- a/nucleus/library/filesystem/huge_file.cpp +++ b/nucleus/library/filesystem/huge_file.cpp @@ -20,7 +20,11 @@ #include #include -#include +#ifndef __WIN32__ + #include +#else + #include +#endif #undef LOG #define LOG(to_print) printf("%s::%s: %s\n", static_class_name(), func, astring(to_print).s()) @@ -281,11 +285,31 @@ outcome huge_file::write(const byte_array &to_write, int &size_written) basis::outcome huge_file::touch() { + FUNCDEF("touch") if (filename(_real_file->name()).exists()) { // file exists, so just update time. +#ifndef __WIN32__ int ret = utimes(_real_file->name().observe(), NIL); if (ret != 0) return FAILURE; +#else + // open the file, although the function says create in its name... + HANDLE f = CreateFile(_real_file->name().observe(), + GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, + NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NIL); + if (!f) { + LOG(a_sprintf("failed to open file %s", _real_file->name().observe())); + return FAILURE; + } + // get current system time in UTC. + SYSTEMTIME *st = new SYSTEMTIME; + GetSystemTime(st); + // convert system time into file time. + FILETIME *t = new FILETIME; + SystemTimeToFileTime(st, t); + // set the file's time. + SetFileTime(f, NIL, t, t); +#endif } else { // file doesn't exist yet. byte_array junk(1); diff --git a/scripts/clam/cpp/variables.def b/scripts/clam/cpp/variables.def index 74334a22..dcf70461 100644 --- a/scripts/clam/cpp/variables.def +++ b/scripts/clam/cpp/variables.def @@ -238,7 +238,8 @@ ifeq "$(HOOPLE_HEADERS)" "" echo "$(FEISTY_MEOW_DIR)/nucleus" "$(FEISTY_MEOW_DIR)/octopi" "$(FEISTY_MEOW_DIR)/graphiq" ; \ else \ echo ""; \ - fi | sed -e "s/\([a-zA-Z]\):\/\(.*\)/\/\1\/\2/" ') + fi | tr "\\\\" / | sed -e "s/\([a-zA-Z]\):\/\([^ ]*\)/\/cygdrive\/\1\/\2/g" ') + # above assumes cygwin support for windows! was assuming msys support. HOOPLE_HEADERS := $(shell $(FIND) $(LOCUS_LIBRARY_HEADERS) -mindepth 1 -maxdepth 1 -type d ) endif diff --git a/scripts/generator/wrapdoze.sh b/scripts/generator/wrapdoze.sh index 2ab57af5..d7432835 100755 --- a/scripts/generator/wrapdoze.sh +++ b/scripts/generator/wrapdoze.sh @@ -15,13 +15,12 @@ function dossify_and_run_commands() for i in "$@"; do if [[ "$i" =~ ^-[a-zA-z][/\"].* ]]; then -echo found parameter to fix... flag="${i:0:2}" filename="$(unix_to_dos_path ${i:2})" -echo "first two chars are $flag" -echo "last after that are $filename" +#echo "first two chars are $flag" +#echo "last after that are $filename" recombined="$flag$filename" -echo combined flag and file is $recombined +#echo combined flag and file is $recombined darc_commands+=("$recombined") else darc_commands+=($(unix_to_dos_path $i)) @@ -34,10 +33,11 @@ echo combined flag and file is $recombined done #temp! - echo commands are now: >>/tmp/wrapdoze.log + echo commands are now: for i in "${real_commands[@]}"; do - echo $i >>/tmp/wrapdoze.log + echo -n "$i " done + echo #end temp # now actually run the chewed command. -- 2.34.1