X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=netinstall%2Fconcat.cc;fp=netinstall%2Fconcat.cc;h=fa865227f98ff2377b239f777ec73e0f5fd1039a;hp=0000000000000000000000000000000000000000;hb=1ecbe603154527afa87c21523aedd8e3bda77c2f;hpb=131844b7560952b4f8e1cb8628d9115e0f2f29d2 diff --git a/netinstall/concat.cc b/netinstall/concat.cc new file mode 100644 index 0000000..fa86522 --- /dev/null +++ b/netinstall/concat.cc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2000, Red Hat, Inc. + * + * 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 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by DJ Delorie + * + */ + +/* See concat.h. Note that we canonicalize the result, this avoids + multiple slashes being interpreted as UNCs. */ + +#include "win32.h" +#include +#include +#include + +char * CDECL +concat (char *s, ...) +{ + int len; + char *rv, *arg; + va_list v; + + if (!s) + return 0; + + len = strlen (s); + + va_start (v, s); + while (1) + { + arg = va_arg (v, char *); + if (arg == 0) + break; + len += strlen (arg); + } + va_end (v); + + rv = (char *) malloc (len+1); + strcpy (rv, s); + va_start (v, s); + while (1) + { + arg = va_arg (v, char *); + if (arg == 0) + break; + strcat (rv, arg); + } + va_end (v); + + /* concat is only used for urls and files, so we can safely + canonicalize the results */ + char *d; + for (s=rv; *s; s++) + if (*s == '\\') + *s = '/'; + for (s=d=rv; *s; s++) + { + *d++ = *s; + /* special case for URLs */ + if (*s == ':' && s[1] == '/' && s[2] == '/' && s > rv+1) + { + *d++ = *++s; + *d++ = *++s; + } + else if (*s == '/') + while (s[1] == '/') + s++; + } + *d = 0; + + return rv; +} + +char * +backslash (char *s) +{ + for (char *t = s; *t; t++) + if (*t == '/') + *t = '\\'; + return s; +}