diff options
-rw-r--r-- | parsing.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -18,6 +18,8 @@ #define TIME_BUFFER_SIZE 0xf #define DATE_BUFFER_SIZE 0x20 +#define max(a, b) ((a) > (b) ? (a) : (b)) + static pthread_mutex_t user_mutex, word_mutex, channel_mutex, time_mutex; static struct user_t *last_user = NULL; @@ -111,10 +113,10 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * user->characters += wcslen(wtext); user->lines[time_i]++; - if(user->seen_first == 0) { + if(user->seen_first == 0 || now_ut < user->seen_first) { user->seen_first = now_ut; } - user->seen_last = now_ut; + user->seen_last = max(now_ut, user->seen_last); pthread_mutex_unlock(&user_mutex); pthread_mutex_lock(&channel_mutex); @@ -167,10 +169,10 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * pthread_mutex_lock(&user_mutex); struct user_t *user = user_get(nick); - if(user->seen_first == 0) { + if(user->seen_first == 0 || now_ut < user->seen_first) { user->seen_first = now_ut; } - user->seen_last = now_ut; + user->seen_last = max(now_ut, user->seen_last); pthread_mutex_unlock(&user_mutex); continue; @@ -198,10 +200,10 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * pthread_mutex_lock(&user_mutex); struct user_t *user = user_get(nick); - if(user->seen_first == 0) { + if(user->seen_first == 0 || now_ut < user->seen_first) { user->seen_first = now_ut; } - user->seen_last = now_ut; + user->seen_last = max(now_ut, user->seen_last); pthread_mutex_unlock(&user_mutex); continue; @@ -229,10 +231,10 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * pthread_mutex_lock(&user_mutex); struct user_t *user = user_get(nick); - if(user->seen_first == 0) { + if(user->seen_first == 0 || now_ut < user->seen_first) { user->seen_first = now_ut; } - user->seen_last = now_ut; + user->seen_last = max(now_ut, user->seen_last); pthread_mutex_unlock(&user_mutex); continue; @@ -260,10 +262,10 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * pthread_mutex_lock(&user_mutex); struct user_t *user = user_get(newnick); - if(user->seen_first == 0) { + if(user->seen_first == 0 || now_ut < user->seen_first) { user->seen_first = now_ut; } - user->seen_last = now_ut; + user->seen_last = max(now_ut, user->seen_last); pthread_mutex_unlock(&user_mutex); continue; @@ -338,10 +340,10 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * user->kicks++; victim_user->kicked++; - if(user->seen_first == 0) { + if(user->seen_first == 0 || now_ut < user->seen_first) { user->seen_first = now_ut; } - user->seen_last = now_ut; + user->seen_last = max(now_ut, user->seen_last); pthread_mutex_unlock(&user_mutex); continue; |