sync code with last improvements from OpenBSD
This commit is contained in:
commit
88965415ff
26235 changed files with 29195616 additions and 0 deletions
82
app/ssh-askpass/dynlist.c
Normal file
82
app/ssh-askpass/dynlist.c
Normal file
|
@ -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);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue