Remove workaround with multiple include folders; Instead use a naive escape function
authorJens Steube <jens.steube@gmail.com>
Fri, 24 Jun 2016 14:57:20 +0000 (16:57 +0200)
committerJens Steube <jens.steube@gmail.com>
Fri, 24 Jun 2016 14:57:20 +0000 (16:57 +0200)
include/shared.h
src/hashcat.c
src/shared.c

index 3e94d23..ab8f517 100644 (file)
@@ -1668,6 +1668,7 @@ int veracrypt_parse_hash_327661   (char *input_buf, uint input_len, hash_t *hash
 int veracrypt_parse_hash_655331   (char *input_buf, uint input_len, hash_t *hash_buf);
 int win8phone_parse_hash          (char *input_buf, uint input_len, hash_t *hash_buf);
 
+void naive_escape (const char *cpath_real, char *cpath_escaped);
 void load_kernel (const char *kernel_file, int num_devices, size_t *kernel_lengths, const u8 **kernel_sources);
 void writeProgramBin (char *dst, u8 *binary, size_t binary_size);
 
index b147aee..ea9fb03 100644 (file)
@@ -15393,32 +15393,33 @@ int main (int argc, char **argv)
        * default building options
        */
 
-      char build_opts[1024] = { 0 };
-
-      // we don't have sm_* on vendors not NV but it doesn't matter
+      char cpath[1024] = { 0 };
 
       #if _WIN
-      snprintf (build_opts, sizeof (build_opts) - 1, "-I \"%s\\OpenCL\\\" -I '%s\\OpenCL\\' -I %s\\OpenCL\\ -I\"%s\\OpenCL\\\" -I'%s\\OpenCL\\' -I%s\\OpenCL\\", shared_dir, shared_dir, shared_dir, shared_dir, shared_dir, shared_dir);
+
+      snprintf (cpath, sizeof (cpath) - 1, "%s\\OpenCL\\", shared_dir);
+
+      char cpath_real[MAX_PATH] = { 0 };
+
+      GetFullPathName (cpath, MAX_PATH, cpath_real, NULL);
+
       #else
-      snprintf (build_opts, sizeof (build_opts) - 1, "-I \"%s/OpenCL/\" -I '%s/OpenCL/' -I %s/OpenCL/ -I\"%s/OpenCL/\" -I'%s/OpenCL/' -I%s/OpenCL/", shared_dir, shared_dir, shared_dir, shared_dir, shared_dir, shared_dir);
-      #endif
 
-      char build_opts_new[1024] = { 0 };
+      snprintf (cpath, sizeof (cpath) - 1, "%s/OpenCL/", shared_dir);
 
-      snprintf (build_opts_new, sizeof (build_opts_new) - 1, "%s -DVENDOR_ID=%u -DCUDA_ARCH=%d -DVECT_SIZE=%u -DDEVICE_TYPE=%u -DKERN_TYPE=%u -D_unroll -cl-std=CL1.1", build_opts, device_param->device_vendor_id, (device_param->sm_major * 100) + device_param->sm_minor, device_param->vector_width, (u32) device_param->device_type, kern_type);
+      char *cpath_real = realpath (cpath, NULL);
 
-      strncpy (build_opts, build_opts_new, sizeof (build_opts) - 1);
+      #endif
 
-      /*
-      if (device_param->device_vendor_id == VENDOR_ID_INTEL_SDK)
-      {
-        // we do vectorizing much better than the auto-vectorizer
+      char cpath_escaped[1024] = { 0 };
 
-        snprintf (build_opts_new, sizeof (build_opts_new) - 1, "%s -cl-opt-disable", build_opts);
+      naive_escape (cpath_real, cpath_escaped);
 
-        strncpy (build_opts, build_opts_new, sizeof (build_opts) - 1);
-      }
-      */
+      // we don't have sm_* on vendors not NV but it doesn't matter
+
+      char build_opts[1024] = { 0 };
+
+      snprintf (build_opts, sizeof (build_opts) - 1, "-I %s -D VENDOR_ID=%u -D CUDA_ARCH=%d -D VECT_SIZE=%u -D DEVICE_TYPE=%u -D KERN_TYPE=%u -D _unroll -cl-std=CL1.1", cpath_escaped, device_param->device_vendor_id, (device_param->sm_major * 100) + device_param->sm_minor, device_param->vector_width, (u32) device_param->device_type, kern_type);
 
       #ifdef DEBUG
       log_info ("- Device #%u: build_opts '%s'\n", device_id + 1, build_opts);
index 292e886..5f99c73 100644 (file)
@@ -9220,6 +9220,29 @@ void myquit ()
   data.devices_status = STATUS_QUIT;
 }
 
+void naive_escape (const char *cpath_real, char *cpath_escaped)
+{
+  const size_t len = MIN (strlen (cpath_real), 1024);
+
+  for (size_t in = 0, out = 0; in < len; in++, out++)
+  {
+    const u8 c = cpath_real[in];
+
+    if (c == ' ')
+    {
+      #if _WIN
+      cpath_escaped[out] = '^';
+      #else
+      cpath_escaped[out] = '\\';
+      #endif
+
+      out++;
+    }
+
+    cpath_escaped[out] = c;
+  }
+}
+
 void load_kernel (const char *kernel_file, int num_devices, size_t *kernel_lengths, const u8 **kernel_sources)
 {
   FILE *fp = fopen (kernel_file, "rb");