summaryrefslogtreecommitdiff
path: root/error.c
blob: 3a5ea9c87eec60b116ff3691d5e8c77e483770d0 (plain)
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
#include "internal.h"

//
// error functions
//

static const char *
fhp_errors[] = {
  "OK",
  "callback error",
  "bad state",
  "invalid character",
  "invalid character in HTTP method",
  "invalid character in HTTP URL",
  "invalid percent-encoded character in HTTP URL",
  "invalid character in HTTP version",
  "invalid character after carriage return",
  "invalid character in HTTP header name",
  "invalid error code",
  "buffer too small",
  "invalid body type",
  "too many transfer encodings",
  "invalid character in transfer encoding name",
  "invalid character in transfer encoding",
  "bad transfer encoding state",
  "transfer encoding parser already done",
};

fhp_err_t
fhp_strerror(
  fhp_err_t err,
  char * const buf,
  size_t len
) {
  // check error code
  if (err >= FHP_ERR_LAST)
    return FHP_ERR_INVALID_ERROR;

  // check buffer size
  size_t err_len = strlen(fhp_errors[err]) + 1;
  if (len < err_len)
    return FHP_ERR_BUFFER_TOO_SMALL;

  // copy string
  memcpy(buf, fhp_errors[err], err_len);

  // return success
  return FHP_OK;
}