Skip to content

Commit

Permalink
convert UTIL_TrimRight/TrimLeft to use std string internally (#121)
Browse files Browse the repository at this point in the history
Convert UTIL_TrimRight/TrimLeft to use std string internally
  • Loading branch information
sapphonie authored Oct 18, 2023
1 parent e5b704f commit e857fbe
Showing 1 changed file with 22 additions and 34 deletions.
56 changes: 22 additions & 34 deletions core/metamod_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <stdio.h>
#include <string>
#include <vector>
#include <algorithm>
#include "metamod_util.h"
#include "metamod_oslink.h"

Expand Down Expand Up @@ -68,46 +69,33 @@ const char *UTIL_GetExtension(const char *file)
return NULL;
}

void UTIL_TrimLeft(char *buffer)
{
/* Let's think of this as our iterator */
char *i = buffer;
// https://stackoverflow.com/a/217605
// trim from start (in place)
static inline void ltrim(std::string& s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) {
return !std::isspace(ch);
}));
}

/* Make sure the buffer isn't null */
if (i && *i)
{
/* Add up number of whitespace characters */
while(isspace((unsigned char) *i))
{
i++;
}
// trim from end (in place)
static inline void rtrim(std::string& s) {
s.erase(std::find_if(s.rbegin(), s.rend(), [](unsigned char ch) {
return !std::isspace(ch);
}).base(), s.end());
}

/* If whitespace chars in buffer then adjust string so first non-whitespace char is at start of buffer */
if (i != buffer)
{
memmove(buffer, i, (strlen(i) + 1) * sizeof(char));
}
}
void UTIL_TrimLeft(char *buffer)
{
std::string s(buffer);
ltrim(s);
strcpy(buffer, s.c_str());
}

void UTIL_TrimRight(char *buffer)
{
/* Make sure buffer isn't null */
if (buffer)
{
size_t len = strlen(buffer);

/* Loop through buffer backwards while replacing whitespace chars with null chars */
for (size_t i = len - 1; i < len; i--)
{
if (isspace((unsigned char) buffer[i]))
{
buffer[i] = '\0';
} else {
break;
}
}
}
std::string s(buffer);
rtrim(s);
strcpy(buffer, s.c_str());
}

bool UTIL_PathCmp(const char *path1, const char *path2)
Expand Down

0 comments on commit e857fbe

Please sign in to comment.