From b59052bce7db1296a8f567205036039c7c7cd121 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 1 May 2009 22:49:12 +0000 Subject: [PATCH] added missing files --- door_daemon/command_queue.c | 95 +++++++++++++++++++++++++++++++++++++++++++ door_daemon/command_queue.h | 39 ++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 door_daemon/command_queue.c create mode 100644 door_daemon/command_queue.h diff --git a/door_daemon/command_queue.c b/door_daemon/command_queue.c new file mode 100644 index 0000000..e99bf16 --- /dev/null +++ b/door_daemon/command_queue.c @@ -0,0 +1,95 @@ +/* + * door_daemon + * + * Copyright (C) 2009 Christian Pointner + * + * This file is part of door_daemon. + * + * door_daemon is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * door_daemon is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with door_daemon. If not, see . + */ + +#include +#include + +#include "command_queue.h" +#include "datatypes.h" + +cmd_t* cmd_get_last(cmd_t* first) +{ + if(!first) + return NULL; + + while(first->next) { + first = first->next; + } + + return first; +} + +int cmd_push(cmd_t** first, int fd, cmd_id_t cmd, const char* param) +{ + if(!first) + return -1; + + cmd_t* new_cmd = malloc(sizeof(cmd_t)); + if(!new_cmd) + return -2; + + new_cmd->fd = fd; + new_cmd->cmd = cmd; + if(param) { + new_cmd->param = strdup(param); + if(!new_cmd->param) { + free(new_cmd); + return -2; + } + } + else + new_cmd->param = NULL; + new_cmd->next = NULL; + + if(!(*first)) { + *first = new_cmd; + return 0; + } + + cmd_get_last(*first)->next = new_cmd; + + return 0; +} + +void cmd_pop(cmd_t** first) +{ + if(!first || !(*first)) + return; + + cmd_t* deletee = *first; + *first = (*first)->next; + if(deletee->param) + free(deletee->param); + free(deletee); +} + +void cmd_clear(cmd_t** first) +{ + if(!first || !(*first)) + return; + + while(*first) { + cmd_t* deletee = *first; + *first = (*first)->next; + if(deletee->param) + free(deletee->param); + free(deletee); + } +} diff --git a/door_daemon/command_queue.h b/door_daemon/command_queue.h new file mode 100644 index 0000000..0e87568 --- /dev/null +++ b/door_daemon/command_queue.h @@ -0,0 +1,39 @@ +/* + * door_daemon + * + * Copyright (C) 2009 Christian Pointner + * + * This file is part of door_daemon. + * + * door_daemon is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * door_daemon is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with door_daemon. If not, see . + */ + +#ifndef _COMMAND_QUEUE_H_ +#define _COMMAND_QUEUE_H_ + +enum cmd_id_enum { OPEN, CLOSE, TOGGLE, RESET, STATUS, LOG }; +typedef enum cmd_id_enum cmd_id_t; + +struct cmd_struct { + int fd; + cmd_id_t cmd; + char* param; + struct cmd_struct* next; +}; +typedef struct cmd_struct cmd_t; + +int cmd_push(cmd_t** first, int fd, cmd_id_t cmd, const char* param); +void cmd_pop(cmd_t** first); +void cmd_clear(cmd_t** first); + +#endif -- 1.7.10.4