Packages
hackney
3.0.2
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/lsquic/src/liblsquic/lsquic_str.c
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_str.c
*
*/
#include <stdlib.h>
#include <string.h>
#include "lsquic_str.h"
lsquic_str_t *
lsquic_str_new (const char *str, size_t sz)
{
lsquic_str_t *lstr;
char *copy;
if (str && sz)
{
copy = malloc(sz + 1);
if (!copy)
return NULL;
memcpy(copy, str, sz);
copy[sz] = '\0';
}
else
copy = NULL;
lstr = malloc(sizeof(*lstr));
if (!lstr)
{
free(copy);
return NULL;
}
lstr->str = copy;
lstr->len = sz;
return lstr;
}
void
lsquic_str_setto (lsquic_str_t *lstr, const void *str, size_t len)
{
if (lsquic_str_len(lstr) > 0)
lsquic_str_d(lstr);
lsquic_str_append(lstr, str, len);
}
int
lsquic_str_append (lsquic_str_t *lstr, const char *str, size_t len)
{
size_t newlen;
char *newstr;
newlen = lstr->len + len;
newstr = realloc(lstr->str, newlen + 1);
if (!newstr)
return -1;
memcpy(newstr + lstr->len, str, len);
newstr[newlen] = '\0';
lstr->str = newstr;
lstr->len = newlen;
return 0;
}
void
lsquic_str_d (lsquic_str_t *lstr)
{
if (lstr) {
free(lstr->str);
lstr->str = NULL;
lstr->len = 0;
}
}
void
lsquic_str_delete (lsquic_str_t *lstr)
{
lsquic_str_d(lstr);
free(lstr);
}
char *
lsquic_str_prealloc (lsquic_str_t *lstr, size_t len)
{
char *str;
str = malloc(len + 1);
if (str)
lstr->str = str;
return str;
}
int
lsquic_str_bcmp (const void *ap, const void *bp)
{
const lsquic_str_t *a = ap, *b = bp;
size_t min;
int rc;
min = a->len < b->len ? a->len : b->len;
rc = memcmp(a->str, b->str, min);
if (rc)
return rc;
else
return (a->len > b->len) - (b->len > a->len);
}
lsquic_str_t *
lsquic_str_copy (lsquic_str_t *lstr_dst, const lsquic_str_t *lstr_src)
{
char *copy;
copy = malloc(lstr_src->len + 1);
if (!copy)
/* Keeping the original behavior: */
return NULL;
memcpy(copy, lstr_src->str, lstr_src->len);
copy[lstr_src->len] = '\0';
lstr_dst->str = copy;
lstr_dst->len = lstr_src->len;
return lstr_dst;
}