From e018f9f2e8d1ed440032a2e4459135fb5fd093ea Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Wed, 3 Feb 2016 19:51:09 +0100
Subject: [PATCH] Almost there.

---
 setup.py                                      |   1 -
 .../grpcio/grpc/_cython/_windows/grpc.def     | 261 ------------------
 src/python/grpcio/grpc/_cython/cygrpc.pyx     |   2 +-
 src/python/grpcio/grpc/_cython/loader.c       |  31 +--
 4 files changed, 5 insertions(+), 290 deletions(-)
 delete mode 100644 src/python/grpcio/grpc/_cython/_windows/grpc.def

diff --git a/setup.py b/setup.py
index 16c2056b75..1a3c838a10 100644
--- a/setup.py
+++ b/setup.py
@@ -201,7 +201,6 @@ PACKAGE_DATA = {
         'credentials/roots.pem'
     ],
     'grpc._cython': [
-        '_windows/grpc.def',
         '_windows/grpc_c.32.python',
         '_windows/grpc_c.64.python',
     ],
diff --git a/src/python/grpcio/grpc/_cython/_windows/grpc.def b/src/python/grpcio/grpc/_cython/_windows/grpc.def
deleted file mode 100644
index 4a1cc75cc9..0000000000
--- a/src/python/grpcio/grpc/_cython/_windows/grpc.def
+++ /dev/null
@@ -1,261 +0,0 @@
-EXPORTS
-    census_initialize
-    census_shutdown
-    census_supported
-    census_enabled
-    census_context_serialize
-    census_trace_mask
-    census_set_trace_mask
-    census_start_rpc_op_timestamp
-    census_start_client_rpc_op
-    census_set_rpc_client_peer
-    census_start_server_rpc_op
-    census_start_op
-    census_end_op
-    census_trace_print
-    census_trace_scan_start
-    census_get_trace_record
-    census_trace_scan_end
-    census_tag_set_create
-    census_tag_set_destroy
-    census_tag_set_get_create_status
-    census_tag_set_initialize_iterator
-    census_tag_set_next_tag
-    census_tag_set_get_tag_by_key
-    census_tag_set_encode
-    census_tag_set_decode
-    census_context_tag_set
-    census_record_values
-    census_view_create
-    census_view_delete
-    census_view_metric
-    census_view_naggregations
-    census_view_tags
-    census_view_aggregrations
-    census_view_get_data
-    census_view_reset
-    grpc_compression_algorithm_parse
-    grpc_compression_algorithm_name
-    grpc_compression_algorithm_for_level
-    grpc_compression_options_init
-    grpc_compression_options_enable_algorithm
-    grpc_compression_options_disable_algorithm
-    grpc_compression_options_is_algorithm_enabled
-    grpc_metadata_array_init
-    grpc_metadata_array_destroy
-    grpc_call_details_init
-    grpc_call_details_destroy
-    grpc_register_plugin
-    grpc_init
-    grpc_shutdown
-    grpc_version_string
-    grpc_completion_queue_create
-    grpc_completion_queue_next
-    grpc_completion_queue_pluck
-    grpc_completion_queue_shutdown
-    grpc_completion_queue_destroy
-    grpc_alarm_create
-    grpc_alarm_cancel
-    grpc_alarm_destroy
-    grpc_channel_check_connectivity_state
-    grpc_channel_watch_connectivity_state
-    grpc_channel_create_call
-    grpc_channel_ping
-    grpc_channel_register_call
-    grpc_channel_create_registered_call
-    grpc_call_start_batch
-    grpc_call_get_peer
-    grpc_census_call_set_context
-    grpc_census_call_get_context
-    grpc_channel_get_target
-    grpc_insecure_channel_create
-    grpc_lame_client_channel_create
-    grpc_channel_destroy
-    grpc_call_cancel
-    grpc_call_cancel_with_status
-    grpc_call_destroy
-    grpc_server_request_call
-    grpc_server_register_method
-    grpc_server_request_registered_call
-    grpc_server_create
-    grpc_server_register_completion_queue
-    grpc_server_add_insecure_http2_port
-    grpc_server_start
-    grpc_server_shutdown_and_notify
-    grpc_server_cancel_all_calls
-    grpc_server_destroy
-    grpc_tracer_set_enabled
-    grpc_header_key_is_legal
-    grpc_header_nonbin_value_is_legal
-    grpc_is_binary_header
-    grpc_auth_property_iterator_next
-    grpc_auth_context_property_iterator
-    grpc_auth_context_peer_identity
-    grpc_auth_context_find_properties_by_name
-    grpc_auth_context_peer_identity_property_name
-    grpc_auth_context_peer_is_authenticated
-    grpc_call_auth_context
-    grpc_auth_context_release
-    grpc_auth_context_add_property
-    grpc_auth_context_add_cstring_property
-    grpc_auth_context_set_peer_identity_property_name
-    grpc_channel_credentials_release
-    grpc_google_default_credentials_create
-    grpc_ssl_credentials_create
-    grpc_call_credentials_release
-    grpc_composite_channel_credentials_create
-    grpc_composite_call_credentials_create
-    grpc_google_compute_engine_credentials_create
-    grpc_max_auth_token_lifetime
-    grpc_service_account_jwt_access_credentials_create
-    grpc_google_refresh_token_credentials_create
-    grpc_access_token_credentials_create
-    grpc_google_iam_credentials_create
-    grpc_metadata_credentials_create_from_plugin
-    grpc_secure_channel_create
-    grpc_server_credentials_release
-    grpc_ssl_server_credentials_create
-    grpc_server_add_secure_http2_port
-    grpc_call_set_credentials
-    grpc_server_credentials_set_auth_metadata_processor
-    gpr_malloc
-    gpr_free
-    gpr_realloc
-    gpr_malloc_aligned
-    gpr_free_aligned
-    gpr_set_allocation_functions
-    gpr_get_allocation_functions
-    grpc_raw_byte_buffer_create
-    grpc_raw_compressed_byte_buffer_create
-    grpc_byte_buffer_copy
-    grpc_byte_buffer_length
-    grpc_byte_buffer_destroy
-    grpc_byte_buffer_reader_init
-    grpc_byte_buffer_reader_destroy
-    grpc_byte_buffer_reader_next
-    grpc_byte_buffer_reader_readall
-    grpc_raw_byte_buffer_from_reader
-    gpr_log
-    gpr_log_message
-    gpr_set_log_function
-    gpr_slice_ref
-    gpr_slice_unref
-    gpr_slice_new
-    gpr_slice_new_with_len
-    gpr_slice_malloc
-    gpr_slice_from_copied_string
-    gpr_slice_from_copied_buffer
-    gpr_slice_from_static_string
-    gpr_slice_sub
-    gpr_slice_sub_no_ref
-    gpr_slice_split_tail
-    gpr_slice_split_head
-    gpr_empty_slice
-    gpr_slice_cmp
-    gpr_slice_str_cmp
-    gpr_slice_buffer_init
-    gpr_slice_buffer_destroy
-    gpr_slice_buffer_add
-    gpr_slice_buffer_add_indexed
-    gpr_slice_buffer_addn
-    gpr_slice_buffer_tiny_add
-    gpr_slice_buffer_pop
-    gpr_slice_buffer_reset_and_unref
-    gpr_slice_buffer_swap
-    gpr_slice_buffer_move_into
-    gpr_slice_buffer_trim_end
-    gpr_slice_buffer_move_first
-    gpr_slice_buffer_take_first
-    gpr_mu_init
-    gpr_mu_destroy
-    gpr_mu_lock
-    gpr_mu_unlock
-    gpr_mu_trylock
-    gpr_cv_init
-    gpr_cv_destroy
-    gpr_cv_wait
-    gpr_cv_signal
-    gpr_cv_broadcast
-    gpr_once_init
-    gpr_event_init
-    gpr_event_set
-    gpr_event_get
-    gpr_event_wait
-    gpr_ref_init
-    gpr_ref
-    gpr_refn
-    gpr_unref
-    gpr_stats_init
-    gpr_stats_inc
-    gpr_stats_read
-    gpr_time_0
-    gpr_inf_future
-    gpr_inf_past
-    gpr_time_init
-    gpr_now
-    gpr_convert_clock_type
-    gpr_time_cmp
-    gpr_time_max
-    gpr_time_min
-    gpr_time_add
-    gpr_time_sub
-    gpr_time_from_micros
-    gpr_time_from_nanos
-    gpr_time_from_millis
-    gpr_time_from_seconds
-    gpr_time_from_minutes
-    gpr_time_from_hours
-    gpr_time_to_millis
-    gpr_time_similar
-    gpr_sleep_until
-    gpr_timespec_to_micros
-    gpr_avl_create
-    gpr_avl_ref
-    gpr_avl_unref
-    gpr_avl_add
-    gpr_avl_remove
-    gpr_avl_get
-    gpr_cmdline_create
-    gpr_cmdline_add_int
-    gpr_cmdline_add_flag
-    gpr_cmdline_add_string
-    gpr_cmdline_on_extra_arg
-    gpr_cmdline_set_survive_failure
-    gpr_cmdline_parse
-    gpr_cmdline_destroy
-    gpr_cmdline_usage_string
-    gpr_cpu_num_cores
-    gpr_cpu_current_cpu
-    gpr_histogram_create
-    gpr_histogram_destroy
-    gpr_histogram_add
-    gpr_histogram_merge
-    gpr_histogram_percentile
-    gpr_histogram_mean
-    gpr_histogram_stddev
-    gpr_histogram_variance
-    gpr_histogram_maximum
-    gpr_histogram_minimum
-    gpr_histogram_count
-    gpr_histogram_sum
-    gpr_histogram_sum_of_squares
-    gpr_histogram_get_contents
-    gpr_histogram_merge_contents
-    gpr_join_host_port
-    gpr_split_host_port
-    gpr_format_message
-    gpr_strdup
-    gpr_asprintf
-    gpr_subprocess_binary_extension
-    gpr_subprocess_create
-    gpr_subprocess_destroy
-    gpr_subprocess_join
-    gpr_subprocess_interrupt
-    gpr_thd_new
-    gpr_thd_options_default
-    gpr_thd_options_set_detached
-    gpr_thd_options_set_joinable
-    gpr_thd_options_is_detached
-    gpr_thd_options_is_joinable
-    gpr_thd_currentid
-    gpr_thd_join
diff --git a/src/python/grpcio/grpc/_cython/cygrpc.pyx b/src/python/grpcio/grpc/_cython/cygrpc.pyx
index f30fb17239..f2e7ca49b2 100644
--- a/src/python/grpcio/grpc/_cython/cygrpc.pyx
+++ b/src/python/grpcio/grpc/_cython/cygrpc.pyx
@@ -48,7 +48,7 @@ include "grpc/_cython/_cygrpc/server.pyx.pxi"
 cdef class _ModuleState:
 
   def __cinit__(self):
-    filename = pkg_resources.resource_filename(__name__, '_windows/grpc.def')
+    filename = pkg_resources.resource_filename(__name__, '_windows/grpc_c.64.python')
     directory = os.path.dirname(filename)
     if not pygrpc_load_core(directory):
       raise ImportError('failed to load core gRPC library')
diff --git a/src/python/grpcio/grpc/_cython/loader.c b/src/python/grpcio/grpc/_cython/loader.c
index f234c4af96..b56693dfb1 100644
--- a/src/python/grpcio/grpc/_cython/loader.c
+++ b/src/python/grpcio/grpc/_cython/loader.c
@@ -34,35 +34,12 @@
 #include "loader.h"
 
 #if GPR_WIN32
-#include <tchar.h>
 
 int pygrpc_load_core(const char *path) {
-  if (!SetDllDirectoryA(path)) {
-    return 0;
-  }
-#if GPR_ARCH_64
-  TCHAR fname[] = _T("grpc_c.64.python");
-#else
-  TCHAR fname[] = _T("grpc_c.32.python");
-#endif
-  HMODULE module = GetModuleHandle(_T("grpc_c.so"));
-  TCHAR path[2048 + 32] = _T("");
-  LPTSTR seek_back = NULL;
-  GetModuleFileName(module, path, 2048);
-
-  seek_back = _tcsrchr(path, _T('\\'));
-
-  while (seek_back) {
-    HMODULE grpc_c;
-    _tcscpy(seek_back + 1, fname);
-    grpc_c = LoadLibrary(path);
-    if (grpc_c) {
-      pygrpc_load_imports(grpc_c);
-      return 1;
-    } else {
-      *seek_back = _T('\0');
-      seek_back = _tcsrchr(path, _T('\\'));
-    }
+  HMODULE grpc_c = LoadLibraryA(path);
+  if (grpc_c) {
+    pygrpc_load_imports(grpc_c);
+    return 1;
   }
 
   return 0;
-- 
GitLab