From 268b1e3ad08c84b369fbd2a58cc2dce4eebefedb Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 24 Jun 2016 16:57:20 +0200 Subject: [PATCH] Remove workaround with multiple include folders; Instead use a naive escape function --- include/shared.h | 1 + src/hashcat.c | 45 +++++++++++++++++++++++---------------------- src/shared.c | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/include/shared.h b/include/shared.h index 3e94d23a2..ab8f51786 100644 --- a/include/shared.h +++ b/include/shared.h @@ -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); diff --git a/src/hashcat.c b/src/hashcat.c index b147aee33..ea9fb039d 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -15393,32 +15393,33 @@ int main (int argc, char **argv) * default building options */ - char build_opts[1024] = { 0 }; + char cpath[1024] = { 0 }; + + #if _WIN + + snprintf (cpath, sizeof (cpath) - 1, "%s\\OpenCL\\", shared_dir); + + char cpath_real[MAX_PATH] = { 0 }; + + GetFullPathName (cpath, MAX_PATH, cpath_real, NULL); + + #else + + snprintf (cpath, sizeof (cpath) - 1, "%s/OpenCL/", shared_dir); + + char *cpath_real = realpath (cpath, NULL); + + #endif + + char cpath_escaped[1024] = { 0 }; + + naive_escape (cpath_real, cpath_escaped); // we don't have sm_* on vendors not NV but it doesn't matter - #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); - #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[1024] = { 0 }; - char build_opts_new[1024] = { 0 }; - - 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); - - strncpy (build_opts, build_opts_new, sizeof (build_opts) - 1); - - /* - if (device_param->device_vendor_id == VENDOR_ID_INTEL_SDK) - { - // we do vectorizing much better than the auto-vectorizer - - snprintf (build_opts_new, sizeof (build_opts_new) - 1, "%s -cl-opt-disable", build_opts); - - strncpy (build_opts, build_opts_new, sizeof (build_opts) - 1); - } - */ + 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); diff --git a/src/shared.c b/src/shared.c index 292e886c0..5f99c73c3 100644 --- a/src/shared.c +++ b/src/shared.c @@ -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");