Apply clang-format update to repo (#1154)

Commit bc6c183 introduced a bunch of discrepancies between what files
look like in the repo and what clang-format says they should look like.
However, there were already a few discrepancies prior to that. Most of
these discrepancies seemed to be unintentional, but a few of them were
load-bearing (e.g., a #include that violated header ordering needing
something to have been #defined by a 'later' #include.)

I opted to take what I hope is a relatively smooth-brained approach: I
reverted the .clang-format change, ran clang-format on the whole repo,
reapplied the .clang-format change, reran clang-format again, and then
reverted the commit that contained the first run. Thus the full effect
of this PR should only be to apply the changed formatting rules to the
repo, and from skimming the results, this seems to be the case.

My work can be checked by applying the short, manual commits, and then
rerunning the command listed in the autogenerated commits (those whose
messages I have prefixed auto:) and seeing if your results agree.

It might be that the other diffs should be fixed at some point but I'm
leaving that aside for now.

fd '\.c(c|pp)?$' --print0| xargs -0 clang-format -i
This commit is contained in:
Jōshin 2024-04-25 10:38:00 -07:00 committed by GitHub
parent 342d0c81e5
commit 6e6fc38935
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
863 changed files with 9201 additions and 4627 deletions

View file

@ -25,7 +25,8 @@ const char base32def[] = "0123456789abcdefghjkmnpqrstvwxyz";
int tobits(int b) {
int bits = 0;
while (b && (b >>= 1)) bits++;
while (b && (b >>= 1))
bits++;
return bits;
}
@ -48,7 +49,8 @@ char *EncodeBase32(const char *s, size_t sl, const char *a, size_t al,
size_t *ol) {
size_t count = 0;
char *r = NULL;
if (sl == -1) sl = s ? strlen(s) : 0;
if (sl == -1)
sl = s ? strlen(s) : 0;
if (al == 0) {
a = base32def;
al = sizeof(base32def) / sizeof(a[0]);
@ -78,7 +80,8 @@ char *EncodeBase32(const char *s, size_t sl, const char *a, size_t al,
}
r[count] = '\0';
}
if (ol) *ol = r ? count : 0;
if (ol)
*ol = r ? count : 0;
return r;
}
@ -119,7 +122,8 @@ char *DecodeBase32(const char *s, size_t sl, const char *a, size_t al,
size_t *ol) {
size_t count = 0;
char *r = NULL;
if (sl == -1) sl = s ? strlen(s) : 0;
if (sl == -1)
sl = s ? strlen(s) : 0;
if (al == 0) {
a = base32def;
al = sizeof(base32def) / sizeof(a[0]);
@ -138,12 +142,15 @@ char *DecodeBase32(const char *s, size_t sl, const char *a, size_t al,
map = kBase32cust;
memset(map, -1, 256);
// populate the map based on alphabet
for (int i = 0; i < al; i++) map[a[i] & 0xff] = i;
for (int i = 0; i < al; i++)
map[a[i] & 0xff] = i;
}
while (count < n && *s) {
signed char m = map[*s++ & 0xff];
if (m == -2) continue;
if (m == -1) break;
if (m == -2)
continue;
if (m == -1)
break;
buffer <<= bl;
buffer |= m;
bitsLeft += bl;
@ -154,6 +161,7 @@ char *DecodeBase32(const char *s, size_t sl, const char *a, size_t al,
}
r[count] = '\0';
}
if (ol) *ol = r ? count : 0;
if (ol)
*ol = r ? count : 0;
return r;
}

View file

@ -26,25 +26,44 @@
*/
int CategorizeIp(uint32_t x) {
int a;
if (IsLoopbackIp(x)) return kIpLoopback;
if (IsPrivateIp(x)) return kIpPrivate;
if (IsMulticastIp(x)) return kIpMulticast;
if (IsAnonymousIp(x)) return kIpAnonymous; /* order matters */
if (IsTestnetIp(x)) return kIpTestnet; /* order matters */
if (IsAfrinicIp(x)) return kIpAfrinic;
if (IsLacnicIp(x)) return kIpLacnic;
if (IsApnicIp(x)) return kIpApnic;
if (IsArinIp(x)) return kIpArin;
if (IsRipeIp(x)) return kIpRipe;
if (IsDodIp(x)) return kIpDod;
if (IsLoopbackIp(x))
return kIpLoopback;
if (IsPrivateIp(x))
return kIpPrivate;
if (IsMulticastIp(x))
return kIpMulticast;
if (IsAnonymousIp(x))
return kIpAnonymous; /* order matters */
if (IsTestnetIp(x))
return kIpTestnet; /* order matters */
if (IsAfrinicIp(x))
return kIpAfrinic;
if (IsLacnicIp(x))
return kIpLacnic;
if (IsApnicIp(x))
return kIpApnic;
if (IsArinIp(x))
return kIpArin;
if (IsRipeIp(x))
return kIpRipe;
if (IsDodIp(x))
return kIpDod;
a = (x & 0xff000000) >> 24;
if (a == 12) return kIpAtt;
if (a == 17) return kIpApple;
if (a == 19) return kIpFord;
if (a == 38) return kIpCogent;
if (a == 48) return kIpPrudential;
if (a == 56) return kIpUsps;
if (a == 73) return kIpComcast;
if (a >= 240) return kIpFuture;
if (a == 12)
return kIpAtt;
if (a == 17)
return kIpApple;
if (a == 19)
return kIpFord;
if (a == 38)
return kIpCogent;
if (a == 48)
return kIpPrudential;
if (a == 56)
return kIpUsps;
if (a == 73)
return kIpComcast;
if (a >= 240)
return kIpFuture;
return kIpUnknown;
}

View file

@ -58,22 +58,27 @@ char *DecodeBase64(const char *data, size_t size, size_t *out_size) {
char *r, *q;
int a, b, c, d, w;
const char *p, *pe;
if (size == -1) size = data ? strlen(data) : 0;
if (size == -1)
size = data ? strlen(data) : 0;
if ((r = malloc(ROUNDUP(size, 4) / 4 * 3 + 1))) {
q = r;
p = data;
pe = p + size;
for (;;) {
do {
if (p == pe) goto Done;
if (p == pe)
goto Done;
a = kBase64[*p++ & 0xff];
} while (a == -1);
if (a == -2) continue;
if (a == -2)
continue;
do {
if (p == pe) goto Done;
if (p == pe)
goto Done;
b = kBase64[*p++ & 0xff];
} while (b == -1);
if (b == -2) continue;
if (b == -2)
continue;
do {
c = p < pe ? kBase64[*p++ & 0xff] : -2;
} while (c == -1);
@ -81,16 +86,21 @@ char *DecodeBase64(const char *data, size_t size, size_t *out_size) {
d = p < pe ? kBase64[*p++ & 0xff] : -2;
} while (d == -1);
w = a << 18 | b << 12;
if (c != -2) w |= c << 6;
if (d != -2) w |= d;
if (c != -2)
w |= c << 6;
if (d != -2)
w |= d;
*q++ = (w & 0xFF0000) >> 020;
if (c != -2) *q++ = (w & 0x00FF00) >> 010;
if (d != -2) *q++ = (w & 0x0000FF) >> 000;
if (c != -2)
*q++ = (w & 0x00FF00) >> 010;
if (d != -2)
*q++ = (w & 0x0000FF) >> 000;
}
Done:
n = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
} else {
n = 0;
}

View file

@ -35,15 +35,18 @@ char *DecodeLatin1(const char *p, size_t n, size_t *z) {
size_t i;
char *r, *q;
int8_t v1[16], v2[16], vz[16];
if (z) *z = 0;
if (n == -1) n = p ? strlen(p) : 0;
if (z)
*z = 0;
if (n == -1)
n = p ? strlen(p) : 0;
if ((q = r = malloc(n * 2 + 1))) {
for (i = 0; i < n;) {
bzero(vz, 16); /* 3x speedup for ASCII */
while (i + 16 < n) {
memcpy(v1, p + i, 16);
pcmpgtb(v2, v1, vz);
if (pmovmskb((void *)v2) != 0xFFFF) break;
if (pmovmskb((void *)v2) != 0xFFFF)
break;
memcpy(q, v1, 16);
q += 16;
i += 16;
@ -56,9 +59,11 @@ char *DecodeLatin1(const char *p, size_t n, size_t *z) {
*q++ = 0200 | (c & 077);
}
}
if (z) *z = q - r;
if (z)
*z = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
}
return r;
}

View file

@ -35,14 +35,18 @@ char *EncodeBase64(const char *data, size_t size, size_t *out_size) {
unsigned w;
char *r, *q;
const unsigned char *p, *pe;
if (size == -1) size = data ? strlen(data) : 0;
if ((n = size) % 3) n += 3 - size % 3;
if (size == -1)
size = data ? strlen(data) : 0;
if ((n = size) % 3)
n += 3 - size % 3;
n /= 3, n *= 4;
if ((r = malloc(n + 1))) {
for (q = r, p = (void *)data, pe = p + size; p < pe; p += 3) {
w = p[0] << 020;
if (p + 1 < pe) w |= p[1] << 010;
if (p + 2 < pe) w |= p[2] << 000;
if (p + 1 < pe)
w |= p[1] << 010;
if (p + 2 < pe)
w |= p[2] << 000;
*q++ = CHARS[(w >> 18) & 077];
*q++ = CHARS[(w >> 12) & 077];
*q++ = p + 1 < pe ? CHARS[(w >> 6) & 077] : '=';

View file

@ -45,7 +45,8 @@ char *EncodeHttpHeaderValue(const char *data, size_t size, size_t *out_size) {
size_t n;
char *r, *q;
const char *p, *e;
if (size == -1) size = data ? strlen(data) : 0;
if (size == -1)
size = data ? strlen(data) : 0;
if ((r = malloc(size + 1))) {
t = 0;
q = r;
@ -77,10 +78,12 @@ char *EncodeHttpHeaderValue(const char *data, size_t size, size_t *out_size) {
return NULL;
}
}
while (q > r && (q[-1] == ' ' || q[-1] == '\t')) --q;
while (q > r && (q[-1] == ' ' || q[-1] == '\t'))
--q;
n = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
} else {
n = 0;
}

View file

@ -41,11 +41,15 @@ char *EncodeLatin1(const char *p, size_t n, size_t *z, int f) {
char t[256];
char *r, *q;
bzero(t, sizeof(t));
if (f & kControlC0) memset(t + 0x00, 1, 0x20 - 0x00), t[0x7F] = 1;
if (f & kControlC1) memset(t + 0x80, 1, 0xA0 - 0x80);
if (f & kControlC0)
memset(t + 0x00, 1, 0x20 - 0x00), t[0x7F] = 1;
if (f & kControlC1)
memset(t + 0x80, 1, 0xA0 - 0x80);
t['\t'] = t['\r'] = t['\n'] = t['\v'] = !!(f & kControlWs);
if (z) *z = 0;
if (n == -1) n = p ? strlen(p) : 0;
if (z)
*z = 0;
if (n == -1)
n = p ? strlen(p) : 0;
if ((q = r = malloc(n + 1))) {
for (i = 0; i < n;) {
c = p[i++] & 0xff;
@ -61,9 +65,11 @@ char *EncodeLatin1(const char *p, size_t n, size_t *z, int f) {
}
*q++ = c;
}
if (z) *z = q - r;
if (z)
*z = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
}
return r;
Invalid:

View file

@ -55,8 +55,10 @@ static size_t DimensionUrl(struct Url *h) {
static bool NeedsSquareBrackets(struct Url *h) {
int c;
size_t i;
if (!memchr(h->host.p, ':', h->host.n)) return false;
if (h->pass.p) return true;
if (!memchr(h->host.p, ':', h->host.n))
return false;
if (h->pass.p)
return true;
if (h->host.n >= 4 && h->host.p[0] == 'v' && h->host.p[2] == '.' &&
kHexToInt[h->host.p[1] & 0xFF] != -1) {
for (i = 3; i < h->host.n; ++i) {
@ -122,7 +124,8 @@ char *EncodeUrl(struct Url *h, size_t *z) {
if (h->params.p) {
*p++ = '?';
for (i = 0; i < h->params.n; ++i) {
if (i) *p++ = '&';
if (i)
*p++ = '&';
p = EscapeUrlView(p, &h->params.p[i].key, kEscapeParam);
if (h->params.p[i].val.p) {
*p++ = '=';
@ -136,10 +139,12 @@ char *EncodeUrl(struct Url *h, size_t *z) {
}
n = p - m;
*p++ = '\0';
if ((p = realloc(m, p - m))) m = p;
if ((p = realloc(m, p - m)))
m = p;
} else {
n = 0;
}
if (z) *z = n;
if (z)
*z = n;
return m;
}

View file

@ -33,8 +33,10 @@ char *EscapeHtml(const char *p, size_t n, size_t *z) {
int c;
size_t i;
char *q, *r;
if (z) *z = 0;
if (n == -1) n = p ? strlen(p) : 0;
if (z)
*z = 0;
if (n == -1)
n = p ? strlen(p) : 0;
if ((q = r = malloc(n * 6 + 1))) {
for (i = 0; i < n; ++i) {
switch ((c = p[i])) {
@ -82,9 +84,11 @@ char *EscapeHtml(const char *p, size_t n, size_t *z) {
break;
}
}
if (z) *z = q - r;
if (z)
*z = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
}
return r;
}

View file

@ -64,8 +64,10 @@ char *EscapeJsStringLiteral(char **r, size_t *y, const char *p, size_t n,
uint64_t w;
size_t i, j, m;
wint_t x, a, b;
if (z) *z = 0; // TODO(jart): why is this here?
if (n == -1) n = p ? strlen(p) : 0;
if (z)
*z = 0; // TODO(jart): why is this here?
if (n == -1)
n = p ? strlen(p) : 0;
q = *r;
i = n * 8 + 6 + 1; // only need *6 but *8 is faster
if (i > *y) {
@ -83,7 +85,8 @@ char *EscapeJsStringLiteral(char **r, size_t *y, const char *p, size_t n,
if (i + m <= n) {
for (j = 0;;) {
b = p[i + j] & 0xff;
if (!ThomPikeCont(b)) break;
if (!ThomPikeCont(b))
break;
a = ThomPikeMerge(a, b);
if (++j == m) {
x = a;
@ -148,7 +151,8 @@ char *EscapeJsStringLiteral(char **r, size_t *y, const char *p, size_t n,
__builtin_unreachable();
}
}
if (z) *z = q - *r;
if (z)
*z = q - *r;
*q++ = '\0';
}
return *r;

View file

@ -42,14 +42,18 @@
char *EscapeUrl(const char *p, size_t n, size_t *z, const char T[256]) {
char *r, *q;
struct UrlView v;
if (n == -1) n = p ? strlen(p) : 0;
if (z) *z = 0;
if (n == -1)
n = p ? strlen(p) : 0;
if (z)
*z = 0;
if ((q = r = malloc(n * 6 + 1))) {
v.p = (char *)p, v.n = n;
q = EscapeUrlView(r, &v, T);
if (z) *z = q - r;
if (z)
*z = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
}
return r;
}

View file

@ -138,7 +138,8 @@ static const char *BisectContentType(uint64_t ext) {
const char *FindContentType(const char *p, size_t n) {
int c;
uint64_t w;
if (n == -1) n = p ? strlen(p) : 0;
if (n == -1)
n = p ? strlen(p) : 0;
for (w = 0; n--;) {
c = p[n] & 255;
if (c == '.') {

View file

@ -35,10 +35,13 @@ ssize_t HasControlCodes(const char *p, size_t n, int f) {
wint_t x, a, b;
size_t i, j, m, g;
bzero(t, sizeof(t));
if (f & kControlC0) memset(t + 0x00, 1, 0x20 - 0x00), t[0x7F] = 1;
if (f & kControlC1) memset(t + 0x80, 1, 0xA0 - 0x80);
if (f & kControlC0)
memset(t + 0x00, 1, 0x20 - 0x00), t[0x7F] = 1;
if (f & kControlC1)
memset(t + 0x80, 1, 0xA0 - 0x80);
t['\t'] = t['\r'] = t['\n'] = t['\v'] = !!(f & kControlWs);
if (n == -1) n = p ? strlen(p) : 0;
if (n == -1)
n = p ? strlen(p) : 0;
for (i = 0; i < n;) {
g = i;
x = p[i++] & 0xff;
@ -48,7 +51,8 @@ ssize_t HasControlCodes(const char *p, size_t n, int f) {
if (i + m <= n) {
for (j = 0;;) {
b = p[i + j] & 0xff;
if (!ThomPikeCont(b)) break;
if (!ThomPikeCont(b))
break;
a = ThomPikeMerge(a, b);
if (++j == m) {
x = a;

View file

@ -34,7 +34,8 @@ bool HeaderHas(struct HttpMessage *m, const char *b, int h, const char *s,
size_t n) {
size_t i;
unassert(0 <= h && h < kHttpHeadersMax);
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
if (m->headers[h].a) {
if (memmem(b + m->headers[h].a, m->headers[h].b - m->headers[h].a, s, n)) {
return true;

View file

@ -34,7 +34,8 @@ char *IndentLines(const char *p, size_t n, size_t *z, size_t j) {
char *r, *q;
const char *l;
size_t t, m, a;
if (n == -1) n = p ? strlen(p) : 0;
if (n == -1)
n = p ? strlen(p) : 0;
r = 0;
t = 0;
do {
@ -49,7 +50,8 @@ char *IndentLines(const char *p, size_t n, size_t *z, size_t j) {
r = q;
} else {
free(r);
if (z) *z = 0;
if (z)
*z = 0;
return 0;
}
memset(r + t, ' ', a);
@ -58,7 +60,8 @@ char *IndentLines(const char *p, size_t n, size_t *z, size_t j) {
p += m;
n -= m;
} while (l);
if (z) *z = t;
if (z)
*z = t;
r[t] = '\0';
return r;
}

View file

@ -54,8 +54,10 @@ extern const char kHostChars[256]; // -_0-9A-Za-z
bool IsAcceptableHost(const char *s, size_t n) {
size_t i;
int c, b, j;
if (n == -1) n = s ? strlen(s) : 0;
if (!n) return true;
if (n == -1)
n = s ? strlen(s) : 0;
if (!n)
return true;
if (n > DNS_NAME_MAX) {
return false;
}

View file

@ -40,7 +40,8 @@
bool IsAcceptablePath(const char *data, size_t size) {
const char *p, *e;
int x, y, a, b, t, i, n;
if (size == -1) size = data ? strlen(data) : 0;
if (size == -1)
size = data ? strlen(data) : 0;
t = 0;
y = '/';
p = data;
@ -53,7 +54,8 @@ bool IsAcceptablePath(const char *data, size_t size) {
if (p + n <= e) {
for (i = 0;;) {
b = p[i] & 0xff;
if (!ThomPikeCont(b)) break;
if (!ThomPikeCont(b))
break;
a = ThomPikeMerge(a, b);
if (++i == n) {
x = a;
@ -68,10 +70,10 @@ bool IsAcceptablePath(const char *data, size_t size) {
}
if (y == '/') {
if (x == '.' && // allow /.well-known/ in the first position
(p - data > 2 ||
size < 13 ||
memcmp(data, "/.well-known/", 13) != 0)) return false;
if (x == '/' && t) return false;
(p - data > 2 || size < 13 || memcmp(data, "/.well-known/", 13) != 0))
return false;
if (x == '/' && t)
return false;
}
y = x;
t = 1;

View file

@ -39,7 +39,8 @@
bool IsAcceptablePort(const char *s, size_t n) {
int p, c;
size_t i;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
for (p = i = 0; i < n; ++i) {
c = s[i] & 255;
if ('0' <= c && c <= '9') {

View file

@ -25,10 +25,13 @@
*/
bool IsMimeType(const char *t, size_t n, const char *s) {
size_t i;
if (n == -1) n = t ? strlen(t) : 0;
if (n == -1)
n = t ? strlen(t) : 0;
for (i = 0; i < n; ++i) {
if (!s[i]) return !kHttpToken[t[i] & 0xFF];
if (kToLower[s[i] & 0xFF] != kToLower[t[i] & 0xFF]) return false;
if (!s[i])
return !kHttpToken[t[i] & 0xFF];
if (kToLower[s[i] & 0xFF] != kToLower[t[i] & 0xFF])
return false;
}
return !s[i];
}

View file

@ -58,12 +58,15 @@ static bool BisectNoCompressExts(uint64_t ext) {
bool IsNoCompressExt(const char *p, size_t n) {
int c, i;
uint64_t w;
if (n == -1) n = p ? strlen(p) : 0;
if (n == -1)
n = p ? strlen(p) : 0;
if (n) {
for (i = w = 0; n--;) {
c = p[n] & 255;
if (c == '.') break;
if (++i > 8) return false;
if (c == '.')
break;
if (++i > 8)
return false;
w <<= 8;
w |= kToLower[c];
}

View file

@ -29,7 +29,8 @@
bool IsReasonablePath(const char *data, size_t size) {
const char *p, *e;
int x, y, z, a, b, i, n;
if (size == -1) size = data ? strlen(data) : 0;
if (size == -1)
size = data ? strlen(data) : 0;
z = '/';
y = '/';
x = '/';
@ -43,7 +44,8 @@ bool IsReasonablePath(const char *data, size_t size) {
if (p + n <= e) {
for (i = 0;;) {
b = p[i] & 0xff;
if (!ThomPikeCont(b)) break;
if (!ThomPikeCont(b))
break;
a = ThomPikeMerge(a, b);
if (++i == n) {
x = a;
@ -56,12 +58,16 @@ bool IsReasonablePath(const char *data, size_t size) {
if (x == '\\') {
x = '/';
}
if (z == '/' && y == '.' && x == '/') return false;
if (z == '/' && y == '.' && x == '.') return false;
if (z == '/' && y == '.' && x == '/')
return false;
if (z == '/' && y == '.' && x == '.')
return false;
z = y;
y = x;
}
if (y == '/' && x == '.') return false;
if (z == '/' && y == '.' && x == '.') return false;
if (y == '/' && x == '.')
return false;
if (z == '/' && y == '.' && x == '.')
return false;
return true;
}

View file

@ -33,7 +33,8 @@ static inline bool IsCookieOctet(unsigned char i) {
*/
bool IsValidCookieValue(const char *s, size_t n) {
size_t i;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
for (i = 0; i < n; ++i) {
if (!IsCookieOctet(s[i])) {
return false;

View file

@ -26,8 +26,10 @@
*/
bool IsValidHttpToken(const char *s, size_t n) {
size_t i;
if (!n) return false;
if (n == -1) n = s ? strlen(s) : 0;
if (!n)
return false;
if (n == -1)
n = s ? strlen(s) : 0;
for (i = 0; i < n; ++i) {
if (!kHttpToken[s[i] & 0xff]) {
return false;

View file

@ -38,7 +38,8 @@ struct Cidr ParseCidr(const char *s, size_t n) {
size_t i;
const char *p;
struct Cidr c;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
if ((p = strchr(s, '/'))) {
if ((c.addr = ParseIp(s, (i = p - s))) != -1) {
c.cidr = 0;

View file

@ -30,14 +30,19 @@
int64_t ParseContentLength(const char *s, size_t n) {
size_t i;
int64_t r;
if (n == -1) n = s ? strlen(s) : 0;
if (!n) return -1;
if (n == -1)
n = s ? strlen(s) : 0;
if (!n)
return -1;
for (r = i = 0; i < n; ++i) {
if (s[i] == ',' && i > 0) break;
if (!isdigit(s[i])) return -1;
if (s[i] == ',' && i > 0)
break;
if (!isdigit(s[i]))
return -1;
r *= 10;
r += s[i] - '0';
if (r >= MAXIMUM) return -1;
if (r >= MAXIMUM)
return -1;
}
return r;
}

View file

@ -40,12 +40,14 @@ int ParseForwarded(const char *s, size_t n, uint32_t *ip, uint16_t *port) {
size_t i;
char *r;
uint32_t x;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
if (n) {
t = x = i = 0;
if ((r = memrchr(s, ',', n))) {
i = r - s;
if ((s[++i] & 255) == ' ') ++i; // skip optional space
if ((s[++i] & 255) == ' ')
++i; // skip optional space
}
do {
c = s[i++] & 255;
@ -82,8 +84,10 @@ int ParseForwarded(const char *s, size_t n, uint32_t *ip, uint16_t *port) {
}
}
}
if (ip) *ip = x;
if (port) *port = t;
if (ip)
*ip = x;
if (port)
*port = t;
return 0;
} else {
return -1;

View file

@ -42,8 +42,10 @@ static unsigned ParseMonth(const char *p) {
*/
int64_t ParseHttpDateTime(const char *p, size_t n) {
unsigned year, month, day, hour, minute, second, yday, leap;
if (n == -1) n = p ? strlen(p) : 0;
if (n != 29) return 0;
if (n == -1)
n = p ? strlen(p) : 0;
if (n != 29)
return 0;
day = (p[5] - '0') * 10 + (p[6] - '0') - 1;
month = ParseMonth(p + 8);
year = (p[12] - '0') * 1000 + (p[13] - '0') * 100 + (p[14] - '0') * 10 +

View file

@ -91,8 +91,10 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
c = p[r->i] & 0xff;
switch (r->t) {
case kHttpStateStart:
if (c == '\r' || c == '\n') break; // RFC7230 § 3.5
if (!kHttpToken[c]) return ebadmsg();
if (c == '\r' || c == '\n')
break; // RFC7230 § 3.5
if (!kHttpToken[c])
return ebadmsg();
if (r->type == kHttpRequest) {
r->t = kHttpStateMethod;
r->method = kToUpper[c];
@ -114,14 +116,16 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
c = kToUpper[c];
r->method |= (uint64_t)c << r->a;
r->a += 8;
if (++r->i == n) break;
if (++r->i == n)
break;
c = p[r->i] & 0xff;
}
break;
case kHttpStateUri:
for (;;) {
if (c == ' ' || c == '\r' || c == '\n') {
if (r->i == r->a) return ebadmsg();
if (r->i == r->a)
return ebadmsg();
r->uri.a = r->a;
r->uri.b = r->i;
if (c == ' ') {
@ -135,7 +139,8 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
} else if (c < 0x20 || (0x7F <= c && c < 0xA0)) {
return ebadmsg();
}
if (++r->i == n) break;
if (++r->i == n)
break;
c = p[r->i] & 0xff;
}
break;
@ -158,7 +163,8 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
case kHttpStateStatus:
for (;;) {
if (c == ' ' || c == '\r' || c == '\n') {
if (r->status < 100) return ebadmsg();
if (r->status < 100)
return ebadmsg();
if (c == ' ') {
r->a = r->i + 1;
r->t = kHttpStateMessage;
@ -169,11 +175,13 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
} else if ('0' <= c && c <= '9') {
r->status *= 10;
r->status += c - '0';
if (r->status > 999) return ebadmsg();
if (r->status > 999)
return ebadmsg();
} else {
return ebadmsg();
}
if (++r->i == n) break;
if (++r->i == n)
break;
c = p[r->i] & 0xff;
}
break;
@ -187,12 +195,14 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
} else if (c < 0x20 || (0x7F <= c && c < 0xA0)) {
return ebadmsg();
}
if (++r->i == n) break;
if (++r->i == n)
break;
c = p[r->i] & 0xff;
}
break;
case kHttpStateCr:
if (c != '\n') return ebadmsg();
if (c != '\n')
return ebadmsg();
r->t = kHttpStateLf1;
break;
case kHttpStateLf1:
@ -218,12 +228,14 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
} else if (!kHttpToken[c]) {
return ebadmsg();
}
if (++r->i == n) break;
if (++r->i == n)
break;
c = p[r->i] & 0xff;
}
break;
case kHttpStateColon:
if (c == ' ' || c == '\t') break;
if (c == ' ' || c == '\t')
break;
r->a = r->i;
r->t = kHttpStateValue;
// fallthrough
@ -231,7 +243,8 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
for (;;) {
if (c == '\r' || c == '\n') {
i = r->i;
while (i > r->a && (p[i - 1] == ' ' || p[i - 1] == '\t')) --i;
while (i > r->a && (p[i - 1] == ' ' || p[i - 1] == '\t'))
--i;
if ((h = GetHttpHeader(p + r->k.a, r->k.b - r->k.a)) != -1 &&
(!r->headers[h].a || !kHttpRepeatable[h])) {
r->headers[h].a = r->a;
@ -265,7 +278,8 @@ int ParseHttpMessage(struct HttpMessage *r, const char *p, size_t n) {
} else if ((c < 0x20 && c != '\t') || (0x7F <= c && c < 0xA0)) {
return ebadmsg();
}
if (++r->i == n) break;
if (++r->i == n)
break;
c = p[r->i] & 0xff;
}
break;

View file

@ -31,11 +31,14 @@
uint64_t ParseHttpMethod(const char *str, size_t len) {
int s = 0;
uint64_t w = 0;
if (len == -1) len = str ? strlen(str) : 0;
if (len == -1)
len = str ? strlen(str) : 0;
for (size_t i = 0; i < len; ++i) {
int c = kToUpper[str[i] & 255];
if (!kHttpToken[c]) return 0;
if (s == 64) return 0;
if (!kHttpToken[c])
return 0;
if (s == 64)
return 0;
w |= (uint64_t)c << s;
s += 8;
}

View file

@ -38,23 +38,30 @@ bool ParseHttpRange(const char *p, size_t n, long resourcelength,
long start, length, ending;
*out_start = 0;
*out_length = 0;
if (memchr(p, ',', n)) return false;
if (n < 7 || memcmp(p, "bytes=", 6) != 0) return false;
if (memchr(p, ',', n))
return false;
if (n < 7 || memcmp(p, "bytes=", 6) != 0)
return false;
p += 6, n -= 6;
if (n && *p == '-') {
++p, --n;
length = 0;
while (n && '0' <= *p && *p <= '9') {
if (ckd_mul(&length, length, 10)) return false;
if (ckd_add(&length, length, *p - '0')) return false;
if (ckd_mul(&length, length, 10))
return false;
if (ckd_add(&length, length, *p - '0'))
return false;
++p, --n;
}
if (ckd_sub(&start, resourcelength, length)) return false;
if (ckd_sub(&start, resourcelength, length))
return false;
} else {
start = 0;
while (n && '0' <= *p && *p <= '9') {
if (ckd_mul(&start, start, 10)) return false;
if (ckd_add(&start, start, *p - '0')) return false;
if (ckd_mul(&start, start, 10))
return false;
if (ckd_add(&start, start, *p - '0'))
return false;
++p, --n;
}
if (n && *p == '-') {
@ -64,22 +71,31 @@ bool ParseHttpRange(const char *p, size_t n, long resourcelength,
} else {
length = 0;
while (n && '0' <= *p && *p <= '9') {
if (ckd_mul(&length, length, 10)) return false;
if (ckd_add(&length, length, *p - '0')) return false;
if (ckd_mul(&length, length, 10))
return false;
if (ckd_add(&length, length, *p - '0'))
return false;
++p, --n;
}
if (ckd_add(&length, length, 1)) return false;
if (ckd_sub(&length, length, start)) return false;
if (ckd_add(&length, length, 1))
return false;
if (ckd_sub(&length, length, start))
return false;
}
} else if (ckd_sub(&length, resourcelength, start)) {
return false;
}
}
if (n) return false;
if (start < 0) return false;
if (length < 1) return false;
if (start > resourcelength) return false;
if (ckd_add(&ending, start, length)) return false;
if (n)
return false;
if (start < 0)
return false;
if (length < 1)
return false;
if (start > resourcelength)
return false;
if (ckd_add(&ending, start, length))
return false;
if (ending > resourcelength) {
length = resourcelength - start;
}

View file

@ -32,8 +32,10 @@ int64_t ParseIp(const char *s, size_t n) {
size_t i;
unsigned b, x;
bool dotted = false;
if (n == -1) n = s ? strlen(s) : 0;
if (!n) return -1;
if (n == -1)
n = s ? strlen(s) : 0;
if (!n)
return -1;
for (b = x = j = i = 0; i < n; ++i) {
c = s[i] & 255;
if (isdigit(c)) {
@ -43,7 +45,8 @@ int64_t ParseIp(const char *s, size_t n) {
return -1;
}
} else if (c == '.') {
if (b > 255) return -1;
if (b > 255)
return -1;
dotted = true;
x <<= 8;
x |= b;

View file

@ -204,7 +204,8 @@ static void ParsePath(struct UrlParser *u, struct UrlView *h) {
static void ParseQuery(struct UrlParser *u, struct UrlParams *h) {
bool t = false;
if (!h->p) h->p = malloc(0);
if (!h->p)
h->p = malloc(0);
while (u->i < u->n) {
u->c = u->s[u->i++] & 255;
if (u->c == '#') {
@ -285,7 +286,8 @@ static void ParseFragment(struct UrlParser *u, struct UrlView *h) {
char *ParseUrl(const char *s, size_t n, struct Url *h, int f) {
char *m;
struct UrlParser u;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
u.i = 0;
u.c = 0;
u.s = s;
@ -294,10 +296,14 @@ char *ParseUrl(const char *s, size_t n, struct Url *h, int f) {
bzero(h, sizeof(*h));
if ((m = malloc((f & kUrlLatin1) ? u.n * 2 : u.n))) {
u.q = u.p = m;
if (ParseScheme(&u, h)) ParseAuthority(&u, h);
if (u.c != '#' && u.c != '?') ParsePath(&u, &h->path);
if (u.c == '?') ParseQuery(&u, &h->params);
if (u.c == '#') ParseFragment(&u, &h->fragment);
if (ParseScheme(&u, h))
ParseAuthority(&u, h);
if (u.c != '#' && u.c != '?')
ParsePath(&u, &h->path);
if (u.c == '?')
ParseQuery(&u, &h->params);
if (u.c == '#')
ParseFragment(&u, &h->fragment);
}
return m;
}
@ -325,7 +331,8 @@ char *ParseUrl(const char *s, size_t n, struct Url *h, int f) {
char *ParseParams(const char *s, size_t n, struct UrlParams *h) {
char *m;
struct UrlParser u;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
u.i = 0;
u.s = s;
u.n = n;
@ -365,7 +372,8 @@ char *ParseParams(const char *s, size_t n, struct UrlParams *h) {
char *ParseHost(const char *s, size_t n, struct Url *h) {
char *m;
struct UrlParser u;
if (n == -1) n = s ? strlen(s) : 0;
if (n == -1)
n = s ? strlen(s) : 0;
u.i = 0;
u.c = 0;
u.s = s;

View file

@ -37,7 +37,8 @@
void ReplenishTokens(atomic_uint_fast64_t *w, size_t n) {
for (size_t i = 0; i < n; ++i) {
uint64_t a = atomic_load_explicit(w + i, memory_order_relaxed);
if (a == 0x7f7f7f7f7f7f7f7f) continue;
if (a == 0x7f7f7f7f7f7f7f7f)
continue;
uint64_t b = 0x8080808080808080;
uint64_t c = 0x7f7f7f7f7f7f7f7f ^ a;
uint64_t d = ((((c >> 1 | b) - c) & b) ^ b) >> 7;
@ -75,7 +76,8 @@ void ReplenishTokens(atomic_uint_fast64_t *w, size_t n) {
int AcquireToken(atomic_schar *b, uint32_t x, int c) {
uint32_t i = x >> (32 - c);
int t = atomic_load_explicit(b + i, memory_order_relaxed);
if (t <= 0) return t;
if (t <= 0)
return t;
return atomic_fetch_add_explicit(b + i, -1, memory_order_relaxed);
}

View file

@ -37,14 +37,16 @@ ssize_t Unchunk(struct HttpUnchunker *u, char *p, size_t n, size_t *l) {
c = p[u->i++] & 255;
switch (u->t) {
case kHttpStateChunkStart:
if ((u->m = kHexToInt[c]) == -1) return ebadmsg();
if ((u->m = kHexToInt[c]) == -1)
return ebadmsg();
u->t = kHttpStateChunkSize;
break;
case kHttpStateChunkSize:
if ((h = kHexToInt[c]) != -1) {
u->m *= 16;
u->m += h;
if (u->m >= 0x0000010000000000) return ebadmsg();
if (u->m >= 0x0000010000000000)
return ebadmsg();
break;
}
u->t = kHttpStateChunkExt;
@ -58,7 +60,8 @@ ssize_t Unchunk(struct HttpUnchunker *u, char *p, size_t n, size_t *l) {
}
/* fallthrough */
case kHttpStateChunkLf1:
if (c != '\n') return ebadmsg();
if (c != '\n')
return ebadmsg();
u->t = u->m ? kHttpStateChunk : kHttpStateTrailerStart;
break;
case kHttpStateChunk:
@ -68,7 +71,8 @@ ssize_t Unchunk(struct HttpUnchunker *u, char *p, size_t n, size_t *l) {
u->i += s;
u->j += s;
u->m -= s;
if (!u->m) u->t = kHttpStateChunkCr2;
if (!u->m)
u->t = kHttpStateChunkCr2;
break;
case kHttpStateChunkCr2:
if (c == '\r') {
@ -77,7 +81,8 @@ ssize_t Unchunk(struct HttpUnchunker *u, char *p, size_t n, size_t *l) {
}
/* fallthrough */
case kHttpStateChunkLf2:
if (c != '\n') return ebadmsg();
if (c != '\n')
return ebadmsg();
u->t = kHttpStateChunkStart;
break;
case kHttpStateTrailerStart:
@ -98,14 +103,18 @@ ssize_t Unchunk(struct HttpUnchunker *u, char *p, size_t n, size_t *l) {
}
/* fallthrough */
case kHttpStateTrailerLf1:
if (c != '\n') return ebadmsg();
if (c != '\n')
return ebadmsg();
u->t = kHttpStateTrailerStart;
break;
case kHttpStateTrailerLf2:
if (c != '\n') return ebadmsg();
if (c != '\n')
return ebadmsg();
Finished:
if (l) *l = u->j;
if (u->j < n) p[u->j] = 0;
if (l)
*l = u->j;
if (u->j < n)
p[u->j] = 0;
return u->i;
break;
default:

View file

@ -41,15 +41,18 @@ char *Underlong(const char *p, size_t n, size_t *z) {
size_t i, j, m;
wint_t x, a, b;
int8_t v1[16], v2[16], vz[16];
if (z) *z = 0;
if (n == -1) n = p ? strlen(p) : 0;
if (z)
*z = 0;
if (n == -1)
n = p ? strlen(p) : 0;
if ((q = r = malloc(n * 2 + 1))) {
for (i = 0; i < n;) {
bzero(vz, 16); /* 50x speedup for ASCII */
while (i + 16 < n) {
memcpy(v1, p + i, 16);
pcmpgtb(v2, v1, vz);
if (pmovmskb((void *)v2) != 0xFFFF) break;
if (pmovmskb((void *)v2) != 0xFFFF)
break;
memcpy(q, v1, 16);
q += 16;
i += 16;
@ -61,7 +64,8 @@ char *Underlong(const char *p, size_t n, size_t *z) {
if (i + m <= n) {
for (j = 0;;) {
b = p[i + j] & 0xff;
if (!ThomPikeCont(b)) break;
if (!ThomPikeCont(b))
break;
a = ThomPikeMerge(a, b);
if (++j == m) {
x = a;
@ -76,9 +80,11 @@ char *Underlong(const char *p, size_t n, size_t *z) {
*q++ = w;
} while ((w >>= 8));
}
if (z) *z = q - r;
if (z)
*z = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
}
return r;
}

View file

@ -43,7 +43,8 @@ char *VisualizeControlCodes(const char *data, size_t size, size_t *out_size) {
unsigned i, n;
wint_t x, a, b;
const char *p, *e;
if (size == -1) size = data ? strlen(data) : 0;
if (size == -1)
size = data ? strlen(data) : 0;
if ((r = malloc(size * 6 + 1))) {
q = r;
p = data;
@ -56,7 +57,8 @@ char *VisualizeControlCodes(const char *data, size_t size, size_t *out_size) {
if (p + n <= e) {
for (i = 0;;) {
b = p[i] & 0xff;
if (!ThomPikeCont(b)) break;
if (!ThomPikeCont(b))
break;
a = ThomPikeMerge(a, b);
if (++i == n) {
x = a;
@ -116,7 +118,8 @@ char *VisualizeControlCodes(const char *data, size_t size, size_t *out_size) {
}
n = q - r;
*q++ = '\0';
if ((q = realloc(r, q - r))) r = q;
if ((q = realloc(r, q - r)))
r = q;
} else {
n = 0;
}

View file

@ -54,7 +54,8 @@ char *DescribeSslVerifyFailure(int flags) {
p = malloc(1024);
q = stpcpy(p, "verify failed");
for (i = 0; i < ARRAYLEN(kSslVerifyStrings); ++i) {
if (!(flags & kSslVerifyStrings[i].code)) continue;
if (!(flags & kSslVerifyStrings[i].code))
continue;
q = stpcpy(stpcpy(q, " "), kSslVerifyStrings[i].str);
}
return p;

View file

@ -28,10 +28,12 @@ struct Cert FinishCertificate(struct Cert *ca, mbedtls_x509write_cert *wcert,
mbedtls_x509_crt *cert;
p = malloc((n = FRAMESIZE));
i = mbedtls_x509write_crt_der(wcert, p, n, GenerateHardRandom, 0);
if (i < 0) FATALF("write key (grep -0x%04x)", -i);
if (i < 0)
FATALF("write key (grep -0x%04x)", -i);
cert = calloc(1, sizeof(mbedtls_x509_crt));
mbedtls_x509_crt_parse(cert, p + n - i, i);
if (ca) cert->next = ca->cert;
if (ca)
cert->next = ca->cert;
mbedtls_x509write_crt_free(wcert);
free(p);
if ((rc = mbedtls_pk_check_pair(&cert->pk, key))) {

View file

@ -145,8 +145,10 @@ struct SortedInts g_whitelisted;
static wontreturn void ShowUsage(int fd, int rc) {
write(fd, USAGE, sizeof(USAGE) - 1);
if (IsLinux()) write(fd, LINUX_DOCS, sizeof(LINUX_DOCS) - 1);
if (IsBsd()) write(fd, BSD_DOCS, sizeof(BSD_DOCS) - 1);
if (IsLinux())
write(fd, LINUX_DOCS, sizeof(LINUX_DOCS) - 1);
if (IsBsd())
write(fd, BSD_DOCS, sizeof(BSD_DOCS) - 1);
_Exit(rc);
}
@ -288,8 +290,10 @@ void FindFirewall(void) {
}
void OpenLog(void) {
if (!g_logname) return;
if (!g_daemonize) return;
if (!g_logname)
return;
if (!g_daemonize)
return;
if ((g_logfd = open(g_logname, O_WRONLY | O_APPEND | O_CREAT, 0644)) == -1) {
kprintf("error: open(%#s) failed: %s\n", g_logname, strerror(errno));
ShowUsage(2, 5);
@ -314,11 +318,13 @@ void UseLog(void) {
void UninterruptibleSleep(int ms) {
struct timespec ts = timespec_add(timespec_real(), timespec_frommillis(ms));
while (clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts, 0)) errno = 0;
while (clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts, 0))
errno = 0;
}
void Unlink(const char *path) {
if (!path) return;
if (!path)
return;
if (!unlink(path)) {
LOG("deleted %s", path);
} else {
@ -333,7 +339,8 @@ void WritePid(void) {
ssize_t rc;
int fd, pid;
char buf[12] = {0};
if (!g_pidname) return;
if (!g_pidname)
return;
if ((fd = open(g_pidname, O_RDWR | O_CREAT, 0644)) == -1) {
LOG("error: open(%#s) failed: %s", g_pidname, strerror(errno));
_Exit(4);

View file

@ -388,22 +388,26 @@ struct timespec WaitFor(int millis) {
// helper functions for check macro implementation
bool CheckMem(const char *file, int line, void *ptr) {
if (ptr) return true;
if (ptr)
return true;
kprintf("%s:%d: %P: out of memory: %s\n", file, line, strerror(errno));
return false;
}
bool CheckSys(const char *file, int line, long rc) {
if (rc != -1) return true;
if (rc != -1)
return true;
kprintf("%s:%d: %P: %s\n", file, line, strerror(errno));
return false;
}
bool CheckSql(const char *file, int line, int rc) {
if (rc == SQLITE_OK) return true;
if (rc == SQLITE_OK)
return true;
kprintf("%s:%d: %P: %s\n", file, line, sqlite3_errstr(rc));
return false;
}
bool CheckDb(const char *file, int line, int rc, sqlite3 *db) {
if (rc == SQLITE_OK) return true;
if (rc == SQLITE_OK)
return true;
kprintf("%s:%d: %P: %s: %s\n", file, line, sqlite3_errstr(rc),
sqlite3_errmsg(db));
return false;
@ -417,16 +421,20 @@ int DbOpen(const char *path, sqlite3 **db) {
int i, rc;
char sql[128];
rc = sqlite3_open(path, db);
if (rc != SQLITE_OK) return rc;
if (rc != SQLITE_OK)
return rc;
if (!IsWindows() && !IsOpenbsd()) {
ksnprintf(sql, sizeof(sql), "PRAGMA mmap_size=%ld", GetTotalRam());
rc = sqlite3_exec(*db, sql, 0, 0, 0);
if (rc != SQLITE_OK) return rc;
if (rc != SQLITE_OK)
return rc;
}
for (i = 0; i < 7; ++i) {
rc = sqlite3_exec(*db, "PRAGMA journal_mode=WAL", 0, 0, 0);
if (rc == SQLITE_OK) break;
if (rc != SQLITE_BUSY) return rc;
if (rc == SQLITE_OK)
break;
if (rc != SQLITE_BUSY)
return rc;
usleep(1000L << i);
}
return sqlite3_exec(*db, "PRAGMA synchronous=NORMAL", 0, 0, 0);
@ -436,9 +444,12 @@ int DbStep(sqlite3_stmt *stmt) {
int i, rc;
for (i = 0; i < 12; ++i) {
rc = sqlite3_step(stmt);
if (rc == SQLITE_ROW) break;
if (rc == SQLITE_DONE) break;
if (rc != SQLITE_BUSY) return rc;
if (rc == SQLITE_ROW)
break;
if (rc == SQLITE_DONE)
break;
if (rc != SQLITE_BUSY)
return rc;
usleep(1000L << i);
}
return rc;
@ -465,9 +476,12 @@ bool Blackhole(uint32_t ip) {
// validates name registration validity
bool IsValidNick(const char *s, size_t n) {
size_t i;
if (n == -1) n = strlen(s);
if (!n) return false;
if (n > NICK_MAX) return false;
if (n == -1)
n = strlen(s);
if (!n)
return false;
if (n > NICK_MAX)
return false;
for (i = 0; i < n; ++i) {
if (!(isalnum(s[i]) || //
s[i] == '@' || //
@ -533,9 +547,11 @@ bool AddClient(struct Clients *q, const struct Client *v, nsync_time dead) {
}
if (q->count != ARRAYLEN(q->data)) {
int i = q->pos + q->count;
if (ARRAYLEN(q->data) <= i) i -= ARRAYLEN(q->data);
if (ARRAYLEN(q->data) <= i)
i -= ARRAYLEN(q->data);
memcpy(q->data + i, v, sizeof(*v));
if (!q->count) wake = true;
if (!q->count)
wake = true;
q->count++;
added = true;
}
@ -587,9 +603,11 @@ bool AddClaim(struct Claims *q, const struct Claim *v, nsync_time dead) {
}
if (q->count != ARRAYLEN(q->data)) {
int i = q->pos + q->count;
if (ARRAYLEN(q->data) <= i) i -= ARRAYLEN(q->data);
if (ARRAYLEN(q->data) <= i)
i -= ARRAYLEN(q->data);
memcpy(q->data + i, v, sizeof(*v));
if (!q->count) wake = true;
if (!q->count)
wake = true;
q->count++;
added = true;
}
@ -1025,7 +1043,8 @@ void *HttpWorker(void *arg) {
ksnprintf(cashbuf, sizeof(cashbuf), "max-age=%d, must-revalidate",
a->cash);
p = stpcpy(p, cashbuf);
if (comp) p = stpcpy(p, "\r\nContent-Encoding: gzip");
if (comp)
p = stpcpy(p, "\r\nContent-Encoding: gzip");
p = stpcpy(p, "\r\nContent-Length: ");
d = comp ? a->gzip : a->data;
p = FormatInt32(p, d.n);
@ -1082,7 +1101,8 @@ void *HttpWorker(void *arg) {
} else if (UrlStartsWith("/claim")) {
// ip:name registration endpoint
++g_claimrequests;
if (ipv6) goto Ipv6Warning;
if (ipv6)
goto Ipv6Warning;
struct Claim v = {.ip = ip, .created = g_nowish.ts.tv_sec};
if (GetNick(inbuf, msg, &v)) {
if (AddClaim(&g_claims, &v,
@ -1308,7 +1328,8 @@ bool ReloadAsset(struct Asset *a) {
CHECK_MEM((data.p = malloc(st.st_size)));
CHECK_SYS((rc = read(fd, data.p, st.st_size)));
data.n = st.st_size;
if (rc != st.st_size) goto OnError;
if (rc != st.st_size)
goto OnError;
CHECK_MEM((gzip = Gzip(data)).p);
//!//!//!//!//!//!//!//!//!//!//!//!//!/
nsync_mu_lock(&a->lock);
@ -1469,12 +1490,15 @@ bool GenerateScore(struct Asset *out, long secs, long cash) {
// otherwise.. you can use --strace to see the fcntl bloodbath
CHECK_SQL(sqlite3_exec(db, "BEGIN TRANSACTION", 0, 0, 0));
while ((rc = DbStep(stmt)) != SQLITE_DONE) {
if (rc != SQLITE_ROW) CHECK_DB(rc);
if (rc != SQLITE_ROW)
CHECK_DB(rc);
strlcpy(name2, (void *)sqlite3_column_text(stmt, 0), sizeof(name2));
if (!IsValidNick(name2, -1)) continue;
if (!IsValidNick(name2, -1))
continue;
if (strcmp(name1, name2)) {
// name changed
if (namestate) CHECK_SYS(appends(&a.data.p, "],\n"));
if (namestate)
CHECK_SYS(appends(&a.data.p, "],\n"));
namestate = true;
CHECK_SYS(appendf(
&a.data.p, "\"%s\":[\n",
@ -1487,7 +1511,8 @@ bool GenerateScore(struct Asset *out, long secs, long cash) {
sqlite3_column_int64(stmt, 2)));
}
CHECK_SQL(sqlite3_exec(db, "END TRANSACTION", 0, 0, 0));
if (namestate) CHECK_SYS(appends(&a.data.p, "]\n"));
if (namestate)
CHECK_SYS(appends(&a.data.p, "]\n"));
CHECK_SYS(appends(&a.data.p, "}}\n"));
CHECK_DB(sqlite3_finalize(stmt));
CHECK_SQL(sqlite3_close(db));
@ -1540,7 +1565,8 @@ bool GeneratePlot(struct Asset *out, long block, long cash) {
mask = area - 1;
clump = 32 - bsr(area) - 8;
while ((rc = DbStep(stmt)) != SQLITE_DONE) {
if (rc != SQLITE_ROW) CHECK_DB(rc);
if (rc != SQLITE_ROW)
CHECK_DB(rc);
ip = sqlite3_column_int64(stmt, 0);
i = (ip >> clump) & mask;
y = g_hilbert[i][0];
@ -1700,8 +1726,10 @@ StartOver:
CHECK_SYS(appends(&t.data.p, "\"recent\":[\n"));
CHECK_SQL(sqlite3_exec(db, "BEGIN TRANSACTION", 0, 0, 0));
for (once = false; (rc = DbStep(stmt)) != SQLITE_DONE; once = true) {
if (rc != SQLITE_ROW) CHECK_SQL(rc);
if (once) CHECK_SYS(appends(&t.data.p, ",\n"));
if (rc != SQLITE_ROW)
CHECK_SQL(rc);
if (once)
CHECK_SYS(appends(&t.data.p, ",\n"));
CHECK_SYS(
appendf(&t.data.p, "[%ld,\"%s\",%ld]", sqlite3_column_int64(stmt, 0),
EscapeJsStringLiteral(
@ -1939,9 +1967,11 @@ int main(int argc, char *argv[]) {
// the power to serve
if (g_daemonize) {
if (fork() > 0) _Exit(0);
if (fork() > 0)
_Exit(0);
setsid();
if (fork() > 0) _Exit(0);
if (fork() > 0)
_Exit(0);
umask(0);
if (closefrom(0))
for (int i = 0; i < 256; ++i) //