abouttreesummaryrefslogcommitdiff
path: root/src/fixedbuffer.c
blob: ad9989732786d09748a863eecf8ef23754e80af2 (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
#include "fixedbuffer.h"

#include <string.h>

FixedBuffer
FixedBuf(const char * str)
{
    int len = strlen(str);
    FixedBuffer result;
    result.ptr = (char *)str;
    result.cap = len;
    result.len = len;
    return result;
}

bool
FixedBufferToInt(FixedBuffer fb, int * outInt)
{
    bool valid = false;
    int result = 0;

    bool negative = false;

    for (int i = 0; i < fb.len; i++)
    {
        if (i == 0 && fb.ptr[i] == '-')
        {
            negative = true;
            continue;
        }

        int val = fb.ptr[i] - '0';
        if (val < 0 || val > 9)
            return false;

        result *= 10;
        result += val;
        valid = true;
    }

    *outInt = result;
    return valid;
}