diff --git a/src/util/FFstrbuf.c b/src/util/FFstrbuf.c index 37f5cf2d3..c4a01592e 100644 --- a/src/util/FFstrbuf.c +++ b/src/util/FFstrbuf.c @@ -292,21 +292,22 @@ void ffStrbufTrimRightSpace(FFstrbuf* strbuf) strbuf->chars[strbuf->length] = '\0'; } -void ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex) +bool ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex) { if(startIndex > strbuf->length || startIndex >= endIndex) - return; + return false; if(endIndex > strbuf->length) { ffStrbufSubstrBefore(strbuf, startIndex); - return; + return true; } ffStrbufEnsureFree(strbuf, 0); memmove(strbuf->chars + startIndex, strbuf->chars + endIndex, strbuf->length - endIndex); strbuf->length -= (endIndex - startIndex); strbuf->chars[strbuf->length] = '\0'; + return true; } void ffStrbufRemoveS(FFstrbuf* strbuf, const char* str) @@ -362,28 +363,29 @@ void ffStrbufReplaceAllC(FFstrbuf* strbuf, char find, char replace) *current_pos = replace; } -void ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index) +bool ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index) { if(strbuf->length <= index) - return; + return false; if(strbuf->allocated == 0) { //static string ffStrbufInitNS(strbuf, strbuf->length, strbuf->chars); - return; + return true; } strbuf->length = index; strbuf->chars[strbuf->length] = '\0'; + return true; } -void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index) +bool ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index) { if(index >= strbuf->length) { ffStrbufClear(strbuf); - return; + return true; } if(strbuf->allocated == 0) @@ -391,36 +393,45 @@ void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index) //static string strbuf->length -= index + 1; strbuf->chars += index + 1; - return; + return true; } memmove(strbuf->chars, strbuf->chars + index + 1, strbuf->length - index - 1); strbuf->length -= (index + 1); strbuf->chars[strbuf->length] = '\0'; + return true; } -void ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c) +bool ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c) { uint32_t index = ffStrbufFirstIndexC(strbuf, c); - if(index < strbuf->length) - ffStrbufSubstrAfter(strbuf, index); + if(index >= strbuf->length) + return false; + ffStrbufSubstrAfter(strbuf, index); + return true; } -void ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str) +bool ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str) { if(*str == '\0') - return; + return false; uint32_t index = ffStrbufFirstIndexS(strbuf, str) + (uint32_t) strlen(str) - 1; // -1, because firstIndexS is already pointing to str[0], we want to add only the remaining length - if(index < strbuf->length) - ffStrbufSubstrAfter(strbuf, index); + if(index >= strbuf->length) + return false; + + ffStrbufSubstrAfter(strbuf, index); + return true; } -void ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c) +bool ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c) { uint32_t index = ffStrbufLastIndexC(strbuf, c); - if(index < strbuf->length) - ffStrbufSubstrAfter(strbuf, index); + if(index >= strbuf->length) + return false; + + ffStrbufSubstrAfter(strbuf, index); + return true; } uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c) @@ -448,10 +459,13 @@ bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end) return false; } -void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c) +bool ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c) { - if(!ffStrbufEndsWithC(strbuf, c)) - ffStrbufAppendC(strbuf, c); + if(ffStrbufEndsWithC(strbuf, c)) + return false; + + ffStrbufAppendC(strbuf, c); + return true; } void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file) diff --git a/src/util/FFstrbuf.h b/src/util/FFstrbuf.h index 92ea2da1f..a3b7179a4 100644 --- a/src/util/FFstrbuf.h +++ b/src/util/FFstrbuf.h @@ -56,7 +56,7 @@ void ffStrbufTrimLeft(FFstrbuf* strbuf, char c); void ffStrbufTrimRight(FFstrbuf* strbuf, char c); void ffStrbufTrimRightSpace(FFstrbuf* strbuf); -void ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex); +bool ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex); void ffStrbufRemoveS(FFstrbuf* strbuf, const char* str); void ffStrbufRemoveStrings(FFstrbuf* strbuf, uint32_t numStrings, const char* strings[]); @@ -67,17 +67,18 @@ FF_C_NODISCARD uint32_t ffStrbufPreviousIndexC(const FFstrbuf* strbuf, uint32_t void ffStrbufReplaceAllC(FFstrbuf* strbuf, char find, char replace); -void ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index); -void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index); // Not including the index -void ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c); -void ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str); -void ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c); +// Returns true if the strbuf is modified +bool ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index); +bool ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index); // Not including the index +bool ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c); +bool ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str); +bool ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c); FF_C_NODISCARD uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c); bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end); -void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c); +bool ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c); void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file); void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file); @@ -383,14 +384,14 @@ static inline FF_C_NODISCARD uint32_t ffStrbufLastIndexC(const FFstrbuf* strbuf, return ffStrbufPreviousIndexC(strbuf, strbuf->length - 1, c); } -static inline void ffStrbufSubstrBeforeFirstC(FFstrbuf* strbuf, char c) +static inline bool ffStrbufSubstrBeforeFirstC(FFstrbuf* strbuf, char c) { - ffStrbufSubstrBefore(strbuf, ffStrbufFirstIndexC(strbuf, c)); + return ffStrbufSubstrBefore(strbuf, ffStrbufFirstIndexC(strbuf, c)); } -static inline void ffStrbufSubstrBeforeLastC(FFstrbuf* strbuf, char c) +static inline bool ffStrbufSubstrBeforeLastC(FFstrbuf* strbuf, char c) { - ffStrbufSubstrBefore(strbuf, ffStrbufLastIndexC(strbuf, c)); + return ffStrbufSubstrBefore(strbuf, ffStrbufLastIndexC(strbuf, c)); } static inline FF_C_NODISCARD bool ffStrbufStartsWithC(const FFstrbuf* strbuf, char c) diff --git a/tests/strbuf.c b/tests/strbuf.c index 0a35012d2..01db4e094 100644 --- a/tests/strbuf.c +++ b/tests/strbuf.c @@ -93,12 +93,26 @@ int main(void) //substr - ffStrbufSubstrBefore(&strbuf, 9); + VERIFY(ffStrbufSubstrBefore(&strbuf, 9)); VERIFY(strbuf.length == 9); VERIFY(strbuf.allocated >= 110); VERIFY(strbuf.chars[strbuf.length] == 0); VERIFY(ffStrbufEqualS(&strbuf, "123456789")); + VERIFY(!ffStrbufSubstrBeforeFirstC(&strbuf, '0')); + VERIFY(!ffStrbufSubstrBeforeLastC(&strbuf, '0')); + VERIFY(!ffStrbufSubstrAfterFirstC(&strbuf, '0')); + VERIFY(!ffStrbufSubstrAfterLastC(&strbuf, '0')); + VERIFY(ffStrbufEqualS(&strbuf, "123456789")); + + VERIFY(ffStrbufSubstrBeforeFirstC(&strbuf, '9')); + VERIFY(ffStrbufSubstrBeforeLastC(&strbuf, '8')); + VERIFY(ffStrbufSubstrAfterFirstC(&strbuf, '1')); + VERIFY(ffStrbufSubstrAfterLastC(&strbuf, '2')); + VERIFY(ffStrbufEqualS(&strbuf, "34567")); + + ffStrbufSetS(&strbuf, "123456789"); + //startsWithC VERIFY(ffStrbufStartsWithC(&strbuf, '1')); @@ -313,7 +327,7 @@ int main(void) //ffStrbufCreateStatic / Substr ffStrbufInitStatic(&strbuf, "__TEST__"); - ffStrbufRemoveSubstr(&strbuf, 0, 6); + VERIFY(ffStrbufRemoveSubstr(&strbuf, 0, 6)); VERIFY(ffStrbufEqualS(&strbuf, "__")); VERIFY(strbuf.length == 2); VERIFY(strbuf.allocated > 0); @@ -321,7 +335,7 @@ int main(void) //ffStrbufCreateStatic / Substr ffStrbufInitStatic(&strbuf, "__TEST__"); - ffStrbufRemoveSubstr(&strbuf, 2, 8); + VERIFY(ffStrbufRemoveSubstr(&strbuf, 2, 8)); VERIFY(ffStrbufEqualS(&strbuf, "__")); VERIFY(strbuf.length == 2); VERIFY(strbuf.allocated > 0); @@ -329,13 +343,13 @@ int main(void) //ffStrbufCreateStatic / Substr ffStrbufInitStatic(&strbuf, "__TEST__"); - ffStrbufRemoveSubstr(&strbuf, 2, 6); + VERIFY(ffStrbufRemoveSubstr(&strbuf, 2, 6)); VERIFY(ffStrbufEqualS(&strbuf, "____")); VERIFY(strbuf.length == 4); VERIFY(strbuf.allocated > 0); ffStrbufDestroy(&strbuf); - //ffStrbufCreateStatic / Substr + //ffStrbufCreateStatic / ReplaceAllC ffStrbufInitStatic(&strbuf, "__TEST__"); ffStrbufReplaceAllC(&strbuf, '_', '-'); VERIFY(ffStrbufEqualS(&strbuf, "--TEST--")); @@ -403,5 +417,5 @@ int main(void) ffStrbufDestroy(&strbuf); //Success - puts("\033[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET); + puts("\e[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET); }