summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c4
-rw-r--r--rtclient/ticket.h7
-rw-r--r--ticket.c15
3 files changed, 19 insertions, 7 deletions
diff --git a/main.c b/main.c
index e0129e4..e18939f 100644
--- a/main.c
+++ b/main.c
@@ -70,8 +70,8 @@ int main(void)
rtclient_ticket_search(&list, query);
if (list) {
for (size_t i = 0; i < list->length; i++) {
- char *ticket = list->tickets[i];
- printf("Ticket %zu: %s\n", i, ticket);
+ struct rtclient_ticket *ticket = list->tickets[i];
+ printf("%d: %s\n", ticket->id, ticket->subject);
}
rtclient_ticket_freelist(list);
}
diff --git a/rtclient/ticket.h b/rtclient/ticket.h
index 87e7496..5b6bdd6 100644
--- a/rtclient/ticket.h
+++ b/rtclient/ticket.h
@@ -1,9 +1,14 @@
#ifndef RTCLIENT_TICKET_H
#define RTCLIENT_TICKET_H
+struct rtclient_ticket {
+ unsigned int id;
+ char *subject;
+};
+
struct rtclient_ticketlist {
size_t length;
- char *tickets[];
+ struct rtclient_ticket *tickets[];
};
#ifdef __cplusplus
diff --git a/ticket.c b/ticket.c
index 77da6b2..c97badd 100644
--- a/ticket.c
+++ b/ticket.c
@@ -2,6 +2,7 @@
#include "post.h"
#include "rtclient/ticket.h"
+typedef struct rtclient_ticket rtclient_ticket;
typedef struct rtclient_ticketlist rtclient_ticketlist;
void rtclient_ticket_new(const char *queue
@@ -69,10 +70,13 @@ static size_t search_callback(void *contents, size_t size, size_t nmemb
line = strtok_r(NULL, "\n", &linesaveptr);
char *tokensaveptr = NULL, *token = NULL;
for (unsigned int i = 0; i < list->length; i++) {
+ list->tickets[i] = malloc(sizeof(rtclient_ticket));
+ rtclient_ticket *ticket = list->tickets[i];
token = strtok_r(line, ":", &tokensaveptr);
+ ticket->id = atoi(token);
token = strtok_r(NULL, ":", &tokensaveptr);
- list->tickets[i] = malloc(strlen(token));
- strcpy(list->tickets[i], ++token);
+ ticket->subject = malloc(strlen(token));
+ strcpy(ticket->subject, ++token);
line = strtok_r(NULL, "\n", &linesaveptr);
}
} else {
@@ -101,8 +105,11 @@ void rtclient_ticket_search(rtclient_ticketlist **listptr, const char *query)
void rtclient_ticket_freelist(rtclient_ticketlist *list)
{
- for (unsigned short i = 0; i < list->length; i++)
- free(list->tickets[i]);
+ for (unsigned short i = 0; i < list->length; i++) {
+ rtclient_ticket *ticket = list->tickets[i];
+ free(ticket->subject);
+ free(ticket);
+ }
free(list);
list = NULL;
}