From 2b21312b367bbde7473e95093fbebbf79e693df1 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 17 Feb 2014 23:29:08 +0100
Subject: [PATCH] util/StringUtil: add StringEndsWith()

Replaces g_str_has_suffix().
---
 src/PlaylistFile.cxx    |  5 ++---
 src/util/StringUtil.cxx | 11 +++++++++++
 src/util/StringUtil.hxx |  4 ++++
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/PlaylistFile.cxx b/src/PlaylistFile.cxx
index a729ac8a0..f5ac2735f 100644
--- a/src/PlaylistFile.cxx
+++ b/src/PlaylistFile.cxx
@@ -36,11 +36,10 @@
 #include "fs/Charset.hxx"
 #include "fs/FileSystem.hxx"
 #include "fs/DirectoryReader.hxx"
+#include "util/StringUtil.hxx"
 #include "util/UriUtil.hxx"
 #include "util/Error.hxx"
 
-#include <glib.h>
-
 #include <assert.h>
 #include <sys/stat.h>
 #include <string.h>
@@ -147,7 +146,7 @@ LoadPlaylistFileInfo(PlaylistInfo &info,
 	    memchr(name_fs_str, '\n', name_length) != nullptr)
 		return false;
 
-	if (!g_str_has_suffix(name_fs_str, PLAYLIST_FILE_SUFFIX))
+	if (!StringEndsWith(name_fs_str, PLAYLIST_FILE_SUFFIX))
 		return false;
 
 	const auto path_fs = AllocatedPath::Build(parent_path_fs, name_fs);
diff --git a/src/util/StringUtil.cxx b/src/util/StringUtil.cxx
index dfe436fd8..9a1a74f86 100644
--- a/src/util/StringUtil.cxx
+++ b/src/util/StringUtil.cxx
@@ -54,6 +54,17 @@ StringStartsWith(const char *haystack, const char *needle)
 	return memcmp(haystack, needle, length) == 0;
 }
 
+bool
+StringEndsWith(const char *haystack, const char *needle)
+{
+	const size_t haystack_length = strlen(haystack);
+	const size_t needle_length = strlen(needle);
+
+	return haystack_length >= needle_length &&
+		memcmp(haystack + haystack_length - needle_length,
+		       needle, needle_length) == 0;
+}
+
 bool
 string_array_contains(const char *const* haystack, const char *needle)
 {
diff --git a/src/util/StringUtil.hxx b/src/util/StringUtil.hxx
index a48e2abc9..779d5d776 100644
--- a/src/util/StringUtil.hxx
+++ b/src/util/StringUtil.hxx
@@ -51,6 +51,10 @@ gcc_pure
 bool
 StringStartsWith(const char *haystack, const char *needle);
 
+gcc_pure
+bool
+StringEndsWith(const char *haystack, const char *needle);
+
 /**
  * Checks whether a string array contains the specified string.
  *