From b1058f88f9938056c5e5ca4c2ca68d2de51bf16a Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Mon, 31 Jan 2000 07:31:31 +0000 Subject: [PATCH] Add isc_mktemplate and isc_ufile --- lib/isc/Makefile.in | 4 +-- lib/isc/include/isc/mktemplate.h | 40 +++++++++++++++++++++++++ lib/isc/include/isc/ufile.h | 44 ++++++++++++++++++++++++++++ lib/isc/unix/Makefile.in | 8 ++--- lib/isc/unix/mktemplate.c | 40 +++++++++++++++++++++++++ lib/isc/unix/ufile.c | 36 +++++++++++++++++++++++ lib/isc/win32/mktemplate.c | 50 ++++++++++++++++++++++++++++++++ 7 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 lib/isc/include/isc/mktemplate.h create mode 100644 lib/isc/include/isc/ufile.h create mode 100644 lib/isc/unix/mktemplate.c create mode 100644 lib/isc/unix/ufile.c create mode 100644 lib/isc/win32/mktemplate.c diff --git a/lib/isc/Makefile.in b/lib/isc/Makefile.in index 7f2587bd3f..e3f9a826f2 100644 --- a/lib/isc/Makefile.in +++ b/lib/isc/Makefile.in @@ -31,8 +31,8 @@ CWARNINGS = # Alphabetically UNIXOBJS = @ISC_ISCIPV6_O@ \ unix/app.@O@ unix/dir.@O@ unix/interfaceiter.@O@ \ - unix/net.@O@ unix/socket.@O@ unix/time.@O@ \ - unix/stdtime.@O@ + unix/mktemplate.@O@ unix/net.@O@ unix/socket.@O@ \ + unix/time.@O@ unix/stdtime.@O@ unix/ufile.@O@ NLSOBJS = nls/msgcat.@O@ diff --git a/lib/isc/include/isc/mktemplate.h b/lib/isc/include/isc/mktemplate.h new file mode 100644 index 0000000000..5278386c4b --- /dev/null +++ b/lib/isc/include/isc/mktemplate.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2000 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#ifndef isc_mktemplate_h +#define isc_mktemplate_h + +#include +#include + +ISC_LANG_BEGINDECLS + +isc_result_t +isc_mktemplate(const char *name, char *buf, size_t buflen); + +/* + * create a template file name suitable for isc_ufile() such + * that it could be renamed to 'name'. + * + * Requires: + * 'name' to be non null. + * 'buf' to be non null. + */ + +ISC_LANG_ENDDECLS + +#endif diff --git a/lib/isc/include/isc/ufile.h b/lib/isc/include/isc/ufile.h new file mode 100644 index 0000000000..ab7d7d0500 --- /dev/null +++ b/lib/isc/include/isc/ufile.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2000 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#ifndef isc_ufile_h +#define isc_ufile_h + +#include +#include + +ISC_LANG_BEGINDECLS + +FILE * isc_ufile(char *template); + +/* + * Create and open a file with a unique name based on 'template'. + * + * Requires: + * 'template' to be non-NULL string containing a trailing + * string of X's. + * + * Returns: + * A file handle opened for 'w+' on success. 'template' + * will contain the file name associated with this handle. + * NULL if a unique name could not be generate or an other + * error occured when opening. 'template' may or may not + * have been destroyed. + */ + +ISC_LANG_ENDDECLS +#endif diff --git a/lib/isc/unix/Makefile.in b/lib/isc/unix/Makefile.in index 4e7e8d8f4e..72dc6b29dd 100644 --- a/lib/isc/unix/Makefile.in +++ b/lib/isc/unix/Makefile.in @@ -28,13 +28,13 @@ CWARNINGS = # Alphabetically OBJS = @ISC_IPV6_O@ \ - app.@O@ dir.@O@ interfaceiter.@O@ net.@O@ socket.@O@ \ - stdtime.@O@ time.@O@ + app.@O@ dir.@O@ interfaceiter.@O@ mktemplate.@O@ net.@O@ \ + socket.@O@ stdtime.@O@ time.@O@ ufile.@O@ # Alphabetically SRCS = @ISC_IPV6_C@ \ - app.c dir.c interfaceiter.c net.c socket.c \ - stdtime.c time.c + app.c dir.c interfaceiter.c mktemplate.c net.c socket.c \ + stdtime.c time.c ufile.c SUBDIRS = include TARGETS = ${OBJS} diff --git a/lib/isc/unix/mktemplate.c b/lib/isc/unix/mktemplate.c new file mode 100644 index 0000000000..791608a4c3 --- /dev/null +++ b/lib/isc/unix/mktemplate.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2000 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include + +#define TEMPLATE "tmp-XXXXXX" + +isc_result_t +isc_mktemplate(const char *file, char *buf, size_t buflen) { + char *s; + + s = strrchr(file, '/'); + if (s != NULL) { + if ((s - file + 1 + sizeof(TEMPLATE)) > buflen) + return (ISC_R_NOSPACE); + strncpy(buf, file, s - file + 1); + buf[s - file + 1] = '\0'; + strcat(buf, TEMPLATE); + return(ISC_R_SUCCESS); + } + if (sizeof(TEMPLATE) > buflen) + return (ISC_R_NOSPACE); + strcpy(buf, TEMPLATE); + return(ISC_R_SUCCESS); +} diff --git a/lib/isc/unix/ufile.c b/lib/isc/unix/ufile.c new file mode 100644 index 0000000000..437564d6d7 --- /dev/null +++ b/lib/isc/unix/ufile.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2000 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include +#include + +FILE * +isc_ufile(char *template) { + int fd; + FILE *f; + + fd = mkstemp(template); + if (fd == -1) + return(NULL); + f = fdopen(fd, "w+"); + if (f == NULL) { + (void)remove(template); + (void)close(fd); + } + return (f); +} diff --git a/lib/isc/win32/mktemplate.c b/lib/isc/win32/mktemplate.c new file mode 100644 index 0000000000..beb1d5c520 --- /dev/null +++ b/lib/isc/win32/mktemplate.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2000 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include + +#define TEMPLATE "tmp-XXXXXX" + +isc_result_t +isc_mktemplate(const char *file, char *buf, size_t buflen) { + char *s; + + s = strrchr(file, '\\'); + if (s != NULL) { + if ((s - file + 1 + sizeof(TEMPLATE)) > buflen) + return (ISC_R_NOSPACE); + strncpy(buf, file, s - file + 1); + buf[s - file + 1] = '\0'; + strcat(buf, TEMPLATE); + return(ISC_R_SUCCESS); + } + s = strrchr(file, ':'); + if (s != NULL) { + if ((s - file + 2 + sizeof(TEMPLATE)) > buflen) + return (ISC_R_NOSPACE); + strncpy(buf, file, s - file + 1); + buf[s - file + 1] = '\\'; + buf[s - file + 2] = '\0'; + strcat(buf, TEMPLATE); + return(ISC_R_SUCCESS); + } + if (sizeof(TEMPLATE) > buflen) + return (ISC_R_NOSPACE); + strcpy(buf, TEMPLATE); + return(ISC_R_SUCCESS); +}