summary refs log tree commit diff stats
path: root/HACKING.md
diff options
context:
space:
mode:
authorWojciech Siewierski <wojciech.siewierski@onet.pl>2015-03-30 19:12:19 +0200
committerWojciech Siewierski <wojciech.siewierski@onet.pl>2015-03-30 21:44:25 +0200
commit453a282ed0d599174cc8f45ed13c54b1be1ea4f6 (patch)
tree5545c9bb17a31b2a856f9ebda9210c57c4056e70 /HACKING.md
parent83bb5b85c2fff3ca3fc9f36ee74f38e8550cfe0d (diff)
downloadranger-453a282ed0d599174cc8f45ed13c54b1be1ea4f6.tar.gz
:flat statusbar indicator added
Diffstat (limited to 'HACKING.md')
0 files changed, 0 insertions, 0 deletions
^
5f128523 ^
9a31c34f ^










5f128523 ^


9a31c34f ^


5f128523 ^
9a31c34f ^



5f128523 ^


9a31c34f ^

5f128523 ^


9a31c34f ^
5f128523 ^


9a31c34f ^


5f128523 ^


9a31c34f ^
5f128523 ^


9a31c34f ^

5f128523 ^


9a31c34f ^
a6defa54 ^
9a31c34f ^
5f128523 ^


9a31c34f ^






5f128523 ^
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
                   


            


                                                               


                      
 



                             
 










                                                             


                                                            


             
 



                                                            


                                                   

                 


                                                    
             


                                                                                


                                      


                                                                    
                                         


                                                              

                             


                                                            
                                      
             
                      


                                                              






                                   
 
struct bytebuffer {
  char *buf;
  int len;
  int cap;
};

static void bytebuffer_reserve(struct bytebuffer *b, int cap) {
  if (b->cap >= cap) {
    return;
  }

  // prefer doubling capacity
  if (b->cap * 2 >= cap) {
    cap = b->cap * 2;
  }

  char *newbuf = malloc(cap);
  if (b->len > 0) {
    // copy what was there, b->len > 0 assumes b->buf != null
    memcpy(newbuf, b->buf, b->len);
  }
  if (b->buf) {
    // in case there was an allocated buffer, free it
    free(b->buf);
  }
  b->buf = newbuf;
  b->cap = cap;
}

static void bytebuffer_init(struct bytebuffer *b, int cap) {
  b->cap = 0;
  b->len = 0;
  b->buf = 0;

  if (cap > 0) {
    b->cap = cap;
    b->buf = malloc(cap); // just assume malloc works always
  }
}

static void bytebuffer_free(struct bytebuffer *b) {
  if (b->buf)
    free(b->buf);
}

static void bytebuffer_clear(struct bytebuffer *b) {
  b->len = 0;
}

static void bytebuffer_append(struct bytebuffer *b, const char *data, int len) {
  bytebuffer_reserve(b, b->len + len);
  memcpy(b->buf + b->len, data, len);
  b->len += len;
}

static void bytebuffer_puts(struct bytebuffer *b, const char *str) {
  bytebuffer_append(b, str, strlen(str));
}

static void bytebuffer_resize(struct bytebuffer *b, int len) {
  bytebuffer_reserve(b, len);
  b->len = len;
}

static void bytebuffer_flush(struct bytebuffer *b, int fd) {
  int yyy = write(fd, b->buf, b->len);
  (void) yyy;
  bytebuffer_clear(b);
}

static void bytebuffer_truncate(struct bytebuffer *b, int n) {
  if (n <= 0)
    return;
  if (n > b->len)
    n = b->len;
  const int nmove = b->len - n;
  memmove(b->buf, b->buf+n, nmove);
  b->len -= n;
}