mcabber/src/events.c
changeset 751 4a7271e69694
parent 746 3a76c2d73606
child 753 584db5f21e43
equal deleted inserted replaced
750:938a8791658c 751:4a7271e69694
    23 #include "events.h"
    23 #include "events.h"
    24 #include "logprint.h"
    24 #include "logprint.h"
    25 
    25 
    26 static GSList *evs_list; // Events list
    26 static GSList *evs_list; // Events list
    27 
    27 
       
    28 static eviqs *evs_find(const char *evid);
    28 
    29 
    29 //  evs_new(type, timeout)
    30 //  evs_new(type, timeout)
    30 // Create an events structure.
    31 // Create an events structure.
    31 eviqs *evs_new(guint8 type, time_t timeout)
    32 eviqs *evs_new(guint8 type, time_t timeout)
    32 {
    33 {
    33   static guint evs_idn;
    34   static guint evs_idn;
    34   eviqs *new_evs;
    35   eviqs *new_evs;
    35   time_t now_t;
    36   time_t now_t;
       
    37   char *stridn;
    36 
    38 
    37   if (!++evs_idn)
    39   if (!++evs_idn)
    38     evs_idn = 1;
    40     evs_idn = 1;
    39   /* TODO: check for wrapping, we shouldn't reuse ids */
    41   /* Check for wrapping, we shouldn't reuse ids */
       
    42   stridn = g_strdup_printf("%d", evs_idn);
       
    43   if (evs_find(stridn))  {
       
    44     g_free(stridn);
       
    45     // We could try another id but for now giving up should be fine...
       
    46     return NULL;
       
    47   }
    40 
    48 
    41   new_evs = g_new0(eviqs, 1);
    49   new_evs = g_new0(eviqs, 1);
    42   time(&now_t);
    50   time(&now_t);
    43   new_evs->ts_create = now_t;
    51   new_evs->ts_create = now_t;
    44   if (timeout)
    52   if (timeout)
    45     new_evs->ts_expire = now_t + timeout;
    53     new_evs->ts_expire = now_t + timeout;
    46   new_evs->type = type;
    54   new_evs->type = type;
    47   new_evs->id = g_strdup_printf("%d", evs_idn);
    55   new_evs->id = stridn;
    48 
    56 
    49   evs_list = g_slist_append(evs_list, new_evs);
    57   evs_list = g_slist_append(evs_list, new_evs);
    50   return new_evs;
    58   return new_evs;
    51 }
    59 }
    52 
    60