aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar gingerBill 2017-12-22 18:19:38 +0000
committerGravatar GitHub 2017-12-22 18:19:38 +0000
commit03abd6fd3c2f9a4472017db5b8df6edf824f4a60 (patch)
tree0bea3aaeb6e003c88d9d0598ad0e98dde17d7eca
parentMerge pull request #27 from den-mentiei/master (diff)
v0.32 Minor fixes
-rw-r--r--gb.h31
1 files changed, 27 insertions, 4 deletions
diff --git a/gb.h b/gb.h
index 48da7ae..0bf8909 100644
--- a/gb.h
+++ b/gb.h
@@ -1,4 +1,4 @@
-/* gb.h - v0.31 - Ginger Bill's C Helper Library - public domain
+/* gb.h - v0.32 - Ginger Bill's C Helper Library - public domain
- no warranty implied; use at your own risk
This is a single header file with a bunch of useful stuff
@@ -58,6 +58,7 @@ TODOS
- More date & time functions
VERSION HISTORY
+ 0.32 - Minor fixes
0.31 - Add gb_file_remove
0.30 - Changes to gbThread (and gbMutex on Windows)
0.29 - Add extras for gbString
@@ -1515,6 +1516,7 @@ typedef struct gbStringHeader {
#define GB_STRING_HEADER(str) (cast(gbStringHeader *)(str) - 1)
+GB_DEF gbString gb_string_make_reserve (gbAllocator a, isize capacity);
GB_DEF gbString gb_string_make (gbAllocator a, char const *str);
GB_DEF gbString gb_string_make_length (gbAllocator a, void const *str, isize num_bytes);
GB_DEF void gb_string_free (gbString str);
@@ -6504,6 +6506,27 @@ gb_inline void gb__set_string_length (gbString str, isize len) { GB_STRING_HEAD
gb_inline void gb__set_string_capacity(gbString str, isize cap) { GB_STRING_HEADER(str)->capacity = cap; }
+gbString gb_string_make_reserve(gbAllocator a, isize capacity) {
+ isize header_size = gb_size_of(gbStringHeader);
+ void *ptr = gb_alloc(a, header_size + capacity + 1);
+
+ gbString str;
+ gbStringHeader *header;
+
+ if (ptr == NULL) return NULL;
+ gb_zero_size(ptr, header_size + capacity + 1);
+
+ str = cast(char *)ptr + header_size;
+ header = GB_STRING_HEADER(str);
+ header->allocator = a;
+ header->length = 0;
+ header->capacity = capacity;
+ str[capacity] = '\0';
+
+ return str;
+}
+
+
gb_inline gbString gb_string_make(gbAllocator a, char const *str) {
isize len = str ? gb_strlen(str) : 0;
return gb_string_make_length(a, str, len);
@@ -6516,8 +6539,8 @@ gbString gb_string_make_length(gbAllocator a, void const *init_str, isize num_by
gbString str;
gbStringHeader *header;
- if (!init_str) gb_zero_size(ptr, header_size + num_bytes + 1);
if (ptr == NULL) return NULL;
+ if (!init_str) gb_zero_size(ptr, header_size + num_bytes + 1);
str = cast(char *)ptr + header_size;
header = GB_STRING_HEADER(str);
@@ -6592,7 +6615,7 @@ gbString gb_string_append_fmt(gbString str, char const *fmt, ...) {
char buf[4096] = {0};
va_list va;
va_start(va, fmt);
- res = gb_snprintf_va(str, gb_count_of(buf)-1, fmt, va);
+ res = gb_snprintf_va(buf, gb_count_of(buf)-1, fmt, va)-1;
va_end(va);
return gb_string_append_length(str, buf, res);
}
@@ -7954,7 +7977,7 @@ gbFileTime gb_file_last_write_time(char const *filepath) {
time_t result = 0;
struct stat file_stat;
- if (stat(filepath, &file_stat)) {
+ if (stat(filepath, &file_stat) == 0) {
result = file_stat.st_mtime;
}