From 8f2d613931c56e11652968db19b8d2fff3062f70 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Fri, 31 Mar 1995 20:31:10 +0000 Subject: Initial revision --- libshouldbeinlibc/=argz.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++ libshouldbeinlibc/=argz.h | 33 +++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 libshouldbeinlibc/=argz.c create mode 100644 libshouldbeinlibc/=argz.h (limited to 'libshouldbeinlibc') diff --git a/libshouldbeinlibc/=argz.c b/libshouldbeinlibc/=argz.c new file mode 100644 index 00000000..68fd6f5f --- /dev/null +++ b/libshouldbeinlibc/=argz.c @@ -0,0 +1,74 @@ +/* Routines for dealing with '\0' separated arg vectors. + + Copyright (C) 1995 Free Software Foundation, Inc. + + Written by Miles Bader + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include +#include +#include + +/* ---------------------------------------------------------------- */ + +/* Make a '\0' separated arg vector from a unix argv vector, returning it in + ARGZ, and the total length in LEN. If a memory allocation error occurs, + ENOMEM is returned, otherwise 0. */ +error_t +argz_create(char **argv, char **argz, int *len) +{ + int tlen = 0; + char **argp; + + for (argp = argv; *argp != NULL; argp++) + tlen += strlen(*argp) + 1; + + *len = tlen; + + if (tlen == 0) + *argz = NULL; + else + { + *argz = malloc(tlen); + if (*argz == NULL) + return ENOMEM; + + while (tlen > 0) + { + tlen -= strlen(*--argp) + 1; + strcpy(*argz + tlen, *argp); + } + } + + return 0; +} + +/* ---------------------------------------------------------------- */ + +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into spaces. */ +void +argz_stringify(char *argz, int len) +{ + while (len > 0) + { + int part_len = strlen(argz); + argz += part_len; + len -= part_len + 1; + if (len > 0) + *argz++ = ' '; + } +} diff --git a/libshouldbeinlibc/=argz.h b/libshouldbeinlibc/=argz.h new file mode 100644 index 00000000..f518bb1e --- /dev/null +++ b/libshouldbeinlibc/=argz.h @@ -0,0 +1,33 @@ +/* Routines for dealing with '\0' separated arg vectors. + + Copyright (C) 1995 Free Software Foundation, Inc. + + Written by Miles Bader + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef __ARGZ_H__ +#define __ARGZ_H__ + +/* Make a '\0' separated arg vector from a unix argv vector, returning it in + ARGZ, and the total length in LEN. If a memory allocation error occurs, + ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ +error_t argz_create(char **argv, char **argz, int *len); + +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into spaces. */ +void argz_stringify(char *argz, int len); + +#endif /* __ARGZ_H__ */ -- cgit v1.2.3