/*! * @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'; } }