-/* $OpenBSD: cipher.c,v 1.124 2025/03/14 09:49:49 tb Exp $ */
+/* $OpenBSD: cipher.c,v 1.125 2025/09/02 11:08:34 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
char *
cipher_alg_list(char sep, int auth_only)
{
- char *tmp, *ret = NULL;
- size_t nlen, rlen = 0;
+ char *ret = NULL;
const struct sshcipher *c;
+ char sep_str[2] = {sep, '\0'};
for (c = ciphers; c->name != NULL; c++) {
if ((c->flags & CFLAG_INTERNAL) != 0)
continue;
if (auth_only && c->auth_len == 0)
continue;
- if (ret != NULL)
- ret[rlen++] = sep;
- nlen = strlen(c->name);
- if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
- free(ret);
- return NULL;
- }
- ret = tmp;
- memcpy(ret + rlen, c->name, nlen + 1);
- rlen += nlen;
+ xextendf(&ret, sep_str, "%s", c->name);
}
return ret;
}
-/* $OpenBSD: kex-names.c,v 1.5 2025/08/11 10:55:38 djm Exp $ */
+/* $OpenBSD: kex-names.c,v 1.6 2025/09/02 11:08:34 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
*
char *
kex_alg_list(char sep)
{
- char *ret = NULL, *tmp;
- size_t nlen, rlen = 0;
+ char *ret = NULL;
const struct kexalg *k;
+ char sep_str[2] = {sep, '\0'};
+
+ for (k = kexalgs; k->name != NULL; k++)
+ xextendf(&ret, sep_str, "%s", k->name);
- for (k = kexalgs; k->name != NULL; k++) {
- if (ret != NULL)
- ret[rlen++] = sep;
- nlen = strlen(k->name);
- if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
- free(ret);
- return NULL;
- }
- ret = tmp;
- memcpy(ret + rlen, k->name, nlen + 1);
- rlen += nlen;
- }
return ret;
}
-/* $OpenBSD: mac.c,v 1.35 2019/09/06 04:53:27 djm Exp $ */
+/* $OpenBSD: mac.c,v 1.36 2025/09/02 11:08:34 djm Exp $ */
/*
* Copyright (c) 2001 Markus Friedl. All rights reserved.
*
char *
mac_alg_list(char sep)
{
- char *ret = NULL, *tmp;
- size_t nlen, rlen = 0;
+ char *ret = NULL;
const struct macalg *m;
+ char sep_str[2] = {sep, '\0'};
+
+ for (m = macs; m->name != NULL; m++)
+ xextendf(&ret, sep_str, "%s", m->name);
- for (m = macs; m->name != NULL; m++) {
- if (ret != NULL)
- ret[rlen++] = sep;
- nlen = strlen(m->name);
- if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
- free(ret);
- return NULL;
- }
- ret = tmp;
- memcpy(ret + rlen, m->name, nlen + 1);
- rlen += nlen;
- }
return ret;
}
-/* $OpenBSD: sshkey.c,v 1.152 2025/08/29 03:50:38 djm Exp $ */
+/* $OpenBSD: sshkey.c,v 1.153 2025/09/02 11:08:34 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Alexander von Gernler. All rights reserved.
char *
sshkey_alg_list(int certs_only, int plain_only, int include_sigonly, char sep)
{
- char *tmp, *ret = NULL;
- size_t i, nlen, rlen = 0;
+ char *ret = NULL;
+ size_t i;
const struct sshkey_impl *impl;
+ char sep_str[2] = {sep, '\0'};
for (i = 0; keyimpls[i] != NULL; i++) {
impl = keyimpls[i];
continue;
if ((certs_only && !impl->cert) || (plain_only && impl->cert))
continue;
- if (ret != NULL)
- ret[rlen++] = sep;
- nlen = strlen(impl->name);
- if ((tmp = realloc(ret, rlen + nlen + 2)) == NULL) {
- free(ret);
- return NULL;
- }
- ret = tmp;
- memcpy(ret + rlen, impl->name, nlen + 1);
- rlen += nlen;
+ xextendf(&ret, sep_str, "%s", impl->name);
}
return ret;
}