]> rtime.felk.cvut.cz Git - ulut.git/commitdiff
Updated ul_htimer callback data type to be portable to 64 bit Windows. ul_drv-0.8.0-release
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Tue, 1 Dec 2009 17:45:39 +0000 (18:45 +0100)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Tue, 1 Dec 2009 17:45:39 +0000 (18:45 +0100)
The 64-bit Windows use LLP64 where pointer value does not
fit in long type variable. On the other hand, on 8 and 16
bit machines uintptr_t can be smaller than long so conditional
type definition is used now.

Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
ulut/ul_htimchk.c
ulut/ul_htimdefs.h
ulut/ul_htimer.h

index 2b485e6e1ccc8b9c484c04aa31daa2130e23af9e..1349e40b226c1c61da37f3c30dd248cb573cf5df 100644 (file)
@@ -56,7 +56,7 @@ void timing_test(void)
   for(i=0;i<items_cnt;i++){
     ul_htimer_init_detached(&items[i]);
     items[i].function=NULL;
-    items[i].data=i;
+    items[i].data=(ul_htimer_fnc_data_t)i;
     if(0){
       ul_htimer_set_expire(&items[i],(i&~1)*500);
     }else{
@@ -104,13 +104,13 @@ void timing_test(void)
 /*===========================================================*/
 /* mstimer test */
 
-void test_htimer_fnc(unsigned long data)
+void test_htimer_fnc(ul_htimer_fnc_data_t data)
 {
   char s[30];
   ul_htim_time_t actual_time;
   ul_get_log_time_str(s);
   ul_root_htimer_current_time(0, &actual_time);
-  printf("%6ld : ms %8ld real %s\n",data,actual_time,s);
+  printf("%6ld : ms %8ld real %s\n",(long)data,actual_time,s);
 }
 
 int mstime_test(void)
@@ -130,7 +130,7 @@ int mstime_test(void)
     /*ensure, that timer is in detached state*/
     ul_htimer_init_detached(timer);
     timer->function=test_htimer_fnc;
-    timer->data=i;
+    timer->data=(ul_htimer_fnc_data_t)i;
     ul_htimer_set_expire(timer,actual_time + (i&~1)*500);
     if(ul_htimer_add(root_htimer, timer)<0)
       printf("ul_htimer_add is buggy\n");
index 1df70472a5743222768be997a2ceabf080f5d3c1..ed2d4e8fc1f3d2299e276724267fada3a882a9ad 100644 (file)
@@ -2,6 +2,9 @@
 #define _UL_HTIMDEFS_H
 
 #include "ul_utdefs.h"
+#ifdef _WIN64
+#include <stdint.h>
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -47,7 +50,14 @@ ul_htimer_cmp_fnc(const ul_htim_time_t *a, const ul_htim_time_t *b)
 /* Additional, user defined fields for ul_htimer_t structure */
 #define UL_HTIMER_USER_FIELDS 
 
-typedef void (ul_htimer_fnc_t)(unsigned long data) UL_ATTR_REENTRANT;
+#ifdef _WIN64
+typedef uintptr_t ul_htimer_fnc_data_t;
+#else
+typedef unsigned long ul_htimer_fnc_data_t;
+#endif
+/*typedef void *ul_htimer_fnc_data_t;*/
+
+typedef void (ul_htimer_fnc_t)(ul_htimer_fnc_data_t data) UL_ATTR_REENTRANT;
 
 /* The wrapper for ul_htimer_run_expired */
 #define UL_HTIMER_FNC_CALL(queue, timer, pact_time) \
index fb260592857dbc41a0ea930cbb7a5a9f285cc25a..ce37d6058ada45071e173315b25c9858f57185b9 100644 (file)
@@ -198,7 +198,7 @@ int cust_prefix##_next_expire(cust_queue_t *queue, ul_htim_time_t *pnext_time)\
 typedef struct ul_htimer {
   ul_htim_node_t htim;
   ul_htimer_fnc_t *function;
-  unsigned long data;
+  ul_htimer_fnc_data_t data;
   UL_HTIMER_USER_FIELDS
 } ul_htimer_t;