131 lines
2.6 KiB
C
131 lines
2.6 KiB
C
/*!
|
|
* @file xstring.c
|
|
* @brief
|
|
* @details
|
|
* Project: \n
|
|
* Subsystem: \n
|
|
* Module: \n
|
|
* Code: GNU-C\n
|
|
*
|
|
* @date 27.02.2017
|
|
* @author SESA354004
|
|
*/
|
|
#include "xstring.h"
|
|
#include "ctype.h"
|
|
|
|
char* gnu_basename(char *path)
|
|
{
|
|
char *baseWin = strrchr(path, '\\');
|
|
char *base = strrchr(path, '/');
|
|
if (baseWin > base)
|
|
{
|
|
base = baseWin;
|
|
}
|
|
return base ? base + 1 : path;
|
|
}
|
|
|
|
/*!
|
|
* @brief Trim leading and trailing whitespaces
|
|
* @param [in] *str Input string
|
|
* @retval char* pointer to the trimmed substring
|
|
*
|
|
* @details
|
|
* This function returns a pointer to a substring of the original string.
|
|
* If the given string was allocated dynamically, the caller must not overwrite
|
|
* that pointer with the returned value, since the original pointer must be
|
|
* deallocated using the same allocator with which it was allocated. The return
|
|
* value must NOT be deallocated using free() etc.
|
|
*/
|
|
char* strntrimStatic(char *aStr, size_t aMaxLength)
|
|
{
|
|
char *end;
|
|
|
|
// Trim leading space
|
|
while (isspace((unsigned char)*aStr) && 0 < aMaxLength)
|
|
{
|
|
if (--aMaxLength > 0)
|
|
{
|
|
++aStr;
|
|
}
|
|
}
|
|
|
|
// All spaces at termination or end of max length
|
|
if (*aStr == '\0' || 0 == aMaxLength)
|
|
{
|
|
return aStr;
|
|
}
|
|
|
|
// Trim trailing space
|
|
if (strlen(aStr) >= aMaxLength)
|
|
{
|
|
end = aStr + aMaxLength - 1;
|
|
}
|
|
else
|
|
{
|
|
end = aStr + strlen(aStr) - 1;
|
|
}
|
|
|
|
while (end > aStr && isspace((unsigned char )*end))
|
|
{
|
|
end--;
|
|
}
|
|
|
|
// Write new null terminator (if length is enough)
|
|
if (end < (aStr + aMaxLength - 1))
|
|
{
|
|
*(end + 1) = '\0';
|
|
}
|
|
|
|
return aStr;
|
|
}
|
|
|
|
void xStringTrim(char *aStr, size_t aMaxLength)
|
|
{
|
|
char *start;
|
|
char *end;
|
|
|
|
if (NULL == aStr)
|
|
{
|
|
return;
|
|
}
|
|
start = aStr;
|
|
// Trim leading space
|
|
while (isspace((unsigned char)*aStr) && 0 < aMaxLength)
|
|
{
|
|
if (--aMaxLength > 0)
|
|
{
|
|
++aStr;
|
|
}
|
|
}
|
|
|
|
// All spaces at termination or end of max length
|
|
if (*aStr == '\0' || 0 == aMaxLength)
|
|
{
|
|
start = '\0';
|
|
return;
|
|
}
|
|
|
|
(void) strlcpy(start, aStr, strlen(aStr) + 1);
|
|
|
|
// Trim trailing space
|
|
if (strlen(start) >= aMaxLength)
|
|
{
|
|
end = start + aMaxLength - 1;
|
|
}
|
|
else
|
|
{
|
|
end = start + strlen(start) - 1;
|
|
}
|
|
|
|
while (end > start && isspace((unsigned char )*end))
|
|
{
|
|
end--;
|
|
}
|
|
|
|
// Write new null terminator (if length is enough)
|
|
if (end < (start + aMaxLength - 1))
|
|
{
|
|
*(end + 1) = '\0';
|
|
}
|
|
}
|