static char *
lustre_match(am_opts *fo)
{
- char *xmtab;
+ char *xmtab, *cp;
size_t l;
char *rhost, *ptr, *remhost;
struct in_addr addr;
*/
rhost = xstrdup(fo->opt_rhost);
remhost = NULL;
- for (ptr = strtok(rhost, ","); ptr; ptr = strtok(NULL, ",")) {
+ for (ptr = strtok(rhost, ":"); ptr; ptr = strtok(NULL, ":")) {
char *at = strchr(ptr, '@');
if (at == NULL) {
plog(XLOG_USER, "lustre: missing protocol in host `%s'", ptr);
memcpy(&addr.s_addr, hp->h_addr, sizeof(addr));
}
*at = '@';
+
+ cp = remhost;
if (remhost)
- remhost = str3cat(remhost, ",", inet_ntoa(addr), at);
+ remhost = strvcat(cp, ":", inet_ntoa(addr), at, NULL);
else
- remhost = str3cat(NULL, inet_ntoa(addr), at, "");
+ remhost = strvcat(inet_ntoa(addr), at, NULL);
+ XFREE(cp);
}
if (remhost == NULL) {
plog(XLOG_USER, "lustre: empty host");
extern char *inet_dquad(char *, size_t, u_long);
extern char *print_wires(void);
extern char *str3cat(char *, char *, char *, char *);
+extern char *strvcat(const char *, ...);
extern char *strealloc(char *, char *);
extern char *strip_selectors(char *, char *);
extern char *strnsave(const char *, int);
return ret;
}
+
+static size_t
+vstrlen(const char *src, va_list ap)
+{
+ size_t len = strlen(src);
+ while ((src = va_arg(ap, const char *)) != NULL)
+ len += strlen(src);
+ return len;
+}
+
+static void
+vstrcpy(char *dst, const char *src, va_list ap)
+{
+ strcpy(dst, src);
+ while ((src = va_arg(ap, const char *)) != NULL)
+ strcat(dst, src);
+}
+
+char *
+strvcat(const char *src, ...)
+{
+ size_t len;
+ char *dst;
+ va_list ap;
+
+ va_start(ap, src);
+ len = vstrlen(src, ap);
+ va_end(ap);
+ dst = xmalloc(len + 1);
+ va_start(ap, src);
+ vstrcpy(dst, src, ap);
+ va_end(ap);
+ return dst;
+}