all repos — xrxs @ 2d4f1f5ec44e7056408dc1c080de2736914ea4a2

experimental networked application/game server with 9p

util.c (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <u.h>
#include "util.h"

uvlong hash(char* str) {
  uvlong h;
  uchar* p;

  h = 0;
  for (p = (unsigned char*)str; *p != '\0'; p++)
    h = 37 * h + *p;
  return h; // or, h % ARRAY_SIZE;
}

char clca(char c) {
  return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c;
} /* char to lowercase */

char cuca(char c) {
  return c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c;
} /* char to uppercase */

int slen(char* s) {
  int i = 0;
  while (s[i] && s[++i]) {
    ;
  }
  return i;
} /* string length */

char* st__(char* s, char (*fn)(char)) {
  int i = 0;
  char c;
  while ((c = s[i]))
    s[i++] = fn(c);
  return s;
}
char* stuc(char* s) { return st__(s, cuca); } /* string to uppercase */

char* stlc(char* s) { return st__(s, clca); } /* string to lowercase */

char* scpy(char* src, char* dst, int len) {
  int i = 0;
  while ((dst[i] = src[i]) && i < len - 2)
    i++;
  dst[i + 1] = '\0';
  return dst;
} /* string copy */

int scmp(char* a, char* b) {
  int i = 0;
  while (a[i] == b[i])
    if (!a[i++])
      return 1;
  return 0;
} /* string compare */

char* scsw(char* s, char a, char b) {
  int i = 0;
  char c;
  while ((c = s[i]))
    s[i++] = c == a ? b : c;
  return s;
} /* string char swap */

char* scat(char* dst, const char* src) {
  char* ptr = dst + slen(dst);
  while (*src)
    *ptr++ = *src++;
  *ptr = '\0';
  return dst;
} /* string cat */

int ssin(char* s, char* ss) {
  int a = 0, b = 0;
  while (s[a]) {
    if (s[a] == ss[b]) {
      if (!ss[b + 1])
        return a - b;
      b++;
    } else
      b = 0;
    a++;
  }
  return -1;
} /* string substring index */

char* ccat(char* dst, char c) {
  int len = slen(dst);
  dst[len] = c;
  dst[len + 1] = '\0';
  return dst;
}