From 7d3d129624dde7269e207d05f80aa30c6e853488 Mon Sep 17 00:00:00 2001 From: jakob Date: Tue, 16 May 2017 23:19:39 -0400 Subject: [PATCH] Updated code style --- src/api.c | 15 ++++++++++++++- src/api.h | 2 +- src/python_api.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/api.c b/src/api.c index da23ce1..721b973 100644 --- a/src/api.c +++ b/src/api.c @@ -41,10 +41,11 @@ static ToxWindow *self_window; extern FriendsList Friends; extern struct user_settings *user_settings; -void api_display(const char * const msg) +void api_display(const char *const msg) { if (msg == NULL) return; + self_window = get_active_window(); line_info_add(self_window, NULL, NULL, NULL, SYS_MSG, 0, 0, msg); } @@ -58,8 +59,10 @@ char *api_get_nick(void) { size_t len = tox_self_get_name_size(user_tox); uint8_t *name = malloc(len + 1); + if (name == NULL) return NULL; + tox_self_get_name(user_tox, name); name[len] = '\0'; return (char *) name; @@ -74,8 +77,10 @@ char *api_get_status_message(void) { size_t len = tox_self_get_status_message_size(user_tox); uint8_t *status = malloc(len + 1); + if (status == NULL) return NULL; + tox_self_get_status_message(user_tox, status); return (char *) status; } @@ -84,6 +89,7 @@ void api_send(const char *msg) { if (msg == NULL || self_window->chatwin->cqueue == NULL) return; + char *name = api_get_nick(); char timefrmt[TIME_STR_SIZE]; get_time_str(timefrmt, sizeof(timefrmt)); @@ -137,12 +143,14 @@ void cmd_run(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX } fp = fopen(argv[1], "r"); + if ( fp == NULL ) { error_str = "Path does not exist!"; line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, error_str); return; } + run_python(fp, argv[1]); fclose(fp); } @@ -154,6 +162,7 @@ void invoke_autoruns(WINDOW *window, ToxWindow *self) size_t path_len; DIR *d = opendir(user_settings->autorun_path); FILE *fp; + if (d == NULL) return; @@ -162,14 +171,18 @@ void invoke_autoruns(WINDOW *window, ToxWindow *self) while ((dir = readdir(d)) != NULL) { path_len = strlen(dir->d_name); + if (!strcmp(dir->d_name + path_len - 3, ".py")) { snprintf(abspath_buf, PATH_MAX + 1, "%s%s", user_settings->autorun_path, dir->d_name); fp = fopen(abspath_buf, "r"); + if (fp == NULL) continue; + run_python(fp, abspath_buf); fclose(fp); } } + closedir(d); } diff --git a/src/api.h b/src/api.h index b0d137f..5875d01 100644 --- a/src/api.h +++ b/src/api.h @@ -26,7 +26,7 @@ #include "friendlist.h" #include "windows.h" -void api_display(const char * const msg); +void api_display(const char *const msg); FriendsList api_get_friendslist(void); char *api_get_nick(void); TOX_USER_STATUS api_get_status(void); diff --git a/src/python_api.c b/src/python_api.c index 34960f1..73577f1 100644 --- a/src/python_api.c +++ b/src/python_api.c @@ -36,8 +36,10 @@ struct python_registered_func { static PyObject *python_api_display(PyObject *self, PyObject *args) { const char *msg; + if (!PyArg_ParseTuple(args, "s", &msg)) return NULL; + api_display(msg); return Py_None; } @@ -46,11 +48,15 @@ static PyObject *python_api_get_nick(PyObject *self, PyObject *args) { char *name; PyObject *ret; + if (!PyArg_ParseTuple(args, "")) return NULL; + name = api_get_nick(); + if (name == NULL) return NULL; + ret = Py_BuildValue("s", name); free(name); return ret; @@ -60,8 +66,10 @@ static PyObject *python_api_get_status(PyObject *self, PyObject *args) { TOX_USER_STATUS status; PyObject *ret; + if (!PyArg_ParseTuple(args, "")) return NULL; + status = api_get_status(); ret = Py_BuildValue("i", status); return ret; @@ -71,11 +79,15 @@ static PyObject *python_api_get_status_message(PyObject *self, PyObject *args) { char *status; PyObject *ret; + if (!PyArg_ParseTuple(args, "")) return NULL; + status = api_get_status_message(); + if (status == NULL) return NULL; + ret = Py_BuildValue("s", status); free(status); return ret; @@ -87,25 +99,32 @@ static PyObject *python_api_get_all_friends(PyObject *self, PyObject *args) FriendsList friends; PyObject *cur, *ret; char pubkey_buf[TOX_PUBLIC_KEY_SIZE * 2 + 1]; + if (!PyArg_ParseTuple(args, "")) return NULL; + friends = api_get_friendslist(); ret = PyList_New(0); + for (i = 0; i < friends.num_friends; i++) { for (ii = 0; ii < TOX_PUBLIC_KEY_SIZE; ii++) snprintf(pubkey_buf + ii * 2, 3, "%02X", friends.list[i].pub_key[ii] & 0xff); + pubkey_buf[TOX_PUBLIC_KEY_SIZE * 2] = '\0'; cur = Py_BuildValue("(s,s)", friends.list[i].name, pubkey_buf); PyList_Append(ret, cur); } + return ret; } static PyObject *python_api_send(PyObject *self, PyObject *args) { const char *msg; + if (!PyArg_ParseTuple(args, "s", &msg)) return NULL; + api_send(msg); return Py_None; } @@ -114,8 +133,10 @@ static PyObject *python_api_execute(PyObject *self, PyObject *args) { int mode; const char *command; + if (!PyArg_ParseTuple(args, "si", &command, &mode)) return NULL; + api_execute(command, mode); return Py_None; } @@ -126,16 +147,20 @@ static PyObject *python_api_register(PyObject *self, PyObject *args) size_t command_len, help_len; const char *command, *help; PyObject *callback; + if (!PyArg_ParseTuple(args, "ssO:register_command", &command, &help, &callback)) return NULL; + if (!PyCallable_Check(callback)) { PyErr_SetString(PyExc_TypeError, "Parameter must be callable"); return NULL; } + if (command[0] != '/') { PyErr_SetString(PyExc_TypeError, "Command must be prefixed with a '/'"); return NULL; } + for (cur = &python_commands; ; cur = cur->next) { if (cur->name != NULL && !strcmp(command, cur->name)) { Py_XDECREF(cur->callback); @@ -143,26 +168,34 @@ static PyObject *python_api_register(PyObject *self, PyObject *args) cur->callback = callback; break; } + if (cur->next == NULL) { Py_XINCREF(callback); cur->next = malloc(sizeof(struct python_registered_func)); + if (cur->next == NULL) return PyErr_NoMemory(); + command_len = strlen(command); cur->next->name = malloc(command_len + 1); + if (cur->next->name == NULL) return PyErr_NoMemory(); + strncpy(cur->next->name, command, command_len + 1); help_len = strlen(help); cur->next->help = malloc(help_len + 1); + if (cur->next->help == NULL) return PyErr_NoMemory(); + strncpy(cur->next->help, help, help_len + 1); cur->next->callback = callback; cur->next->next = NULL; break; } } + Py_INCREF(Py_None); return Py_None; } @@ -195,14 +228,17 @@ PyMODINIT_FUNC PyInit_toxic_api(void) void terminate_python(void) { struct python_registered_func *cur, *old; + if (python_commands.name != NULL) free(python_commands.name); + for (cur = python_commands.next; cur != NULL;) { old = cur; cur = cur->next; free(old->name); free(old); } + Py_FinalizeEx(); } @@ -226,19 +262,26 @@ int do_python_command(int num_args, char (*args)[MAX_STR_SIZE]) int i; PyObject *callback_args, *args_strings; struct python_registered_func *cur; + for (cur = &python_commands; cur != NULL; cur = cur->next) { if (cur->name == NULL) continue; + if (!strcmp(args[0], cur->name)) { args_strings = PyList_New(0); + for (i = 1; i < num_args; i++) PyList_Append(args_strings, Py_BuildValue("s", args[i])); + callback_args = PyTuple_Pack(1, args_strings); + if (PyObject_CallObject(cur->callback, callback_args) == NULL) api_display("Exception raised in callback function"); + return 0; } } + return 1; } @@ -246,10 +289,12 @@ int python_num_registered_handlers(void) { int n = 0; struct python_registered_func *cur; + for (cur = &python_commands; cur != NULL; cur = cur->next) { if (cur->name != NULL) n++; } + return n; } @@ -258,12 +303,14 @@ int python_help_max_width(void) size_t tmp; int max = 0; struct python_registered_func *cur; + for (cur = &python_commands; cur != NULL; cur = cur->next) { if (cur->name != NULL) { tmp = strlen(cur->help); max = tmp > max ? tmp : max; } } + max = max > 50 ? 50 : max; return 37 + max; } @@ -271,6 +318,7 @@ int python_help_max_width(void) void python_draw_handler_help(WINDOW *win) { struct python_registered_func *cur; + for (cur = &python_commands; cur != NULL; cur = cur->next) { if (cur->name != NULL) wprintw(win, " %-29s: %.50s\n", cur->name, cur->help);