diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2006-11-26 10:57:01 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2006-11-26 10:57:01 +0000 |
commit | f35ebe9caf290b8266faae05f7ab8491ad301d7a (patch) | |
tree | 39d39e6eac3dd73663d172228b40ec9bc2709301 /app/ssh-askpass/dynlist.c | |
parent | 1cb4778bcef21ea9015cfccdb99abb7a0e035d74 (diff) |
Importing from XF4, plus BSD make infrastructure
Diffstat (limited to 'app/ssh-askpass/dynlist.c')
-rw-r--r-- | app/ssh-askpass/dynlist.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/app/ssh-askpass/dynlist.c b/app/ssh-askpass/dynlist.c new file mode 100644 index 000000000..d27941df1 --- /dev/null +++ b/app/ssh-askpass/dynlist.c @@ -0,0 +1,82 @@ +/* dynlist.c: Dynamic lists and buffers in C. + * created 1999-Jan-06 15:34 jmk + * autodate: 2000-Aug-28 01:29 + * + * by Jim Knoble <jmknoble@jmknoble.cx> + * Copyright (C) 1999,2000 Jim Knoble + * + * Disclaimer: + * + * The software is provided "as is", without warranty of any kind, + * express or implied, including but not limited to the warranties of + * merchantability, fitness for a particular purpose and + * noninfringement. In no event shall the author(s) be liable for any + * claim, damages or other liability, whether in an action of + * contract, tort or otherwise, arising from, out of or in connection + * with the software or the use or other dealings in the software. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation. + */ + +#include <stdio.h> +#include <stdlib.h> + +#include "dynlist.h" + +#define LIST_CHUNK_SIZE 512 +#define BUF_CHUNK_SIZE 512 + +/* For lists of pointers cast to char *. */ +int append_to_list(char ***list_ptr, int *list_len, int *i, char *item) +{ + char **tmp_ptr; + + if (*i >= *list_len) + { + *list_len += LIST_CHUNK_SIZE; + tmp_ptr = realloc(*list_ptr, (sizeof(**list_ptr) * *list_len)); + if (NULL == tmp_ptr) + { + free(*list_ptr); + *list_ptr = NULL; + return(APPEND_FAILURE); + } else { + *list_ptr = tmp_ptr; + } + *list_ptr = tmp_ptr; + } + (*list_ptr)[*i] = item; + (*i)++; + return(APPEND_SUCCESS); +} + +/* For single-dimensional buffers. */ +int append_to_buf(char **buf, int *buflen, int *i, int c) +{ + char *tmp_buf; + + if (*i >= *buflen) + { + *buflen += BUF_CHUNK_SIZE; + tmp_buf = realloc(*buf, (sizeof(**buf) * *buflen)); + if (NULL == tmp_buf) + { + free(*buf); + *buf = NULL; + return(APPEND_FAILURE); + } else { + *buf = tmp_buf; + } + *buf = tmp_buf; +#ifdef DEBUG + printf("-->Allocated buffer of size %d\n", *buflen); +#endif /* DEBUG */ + } + (*buf)[*i] = (char) c; + (*i)++; + return(APPEND_SUCCESS); +} |