zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/app/busybox/src/libbb/strrstr.c b/ap/app/busybox/src/libbb/strrstr.c
new file mode 100644
index 0000000..d8823fc
--- /dev/null
+++ b/ap/app/busybox/src/libbb/strrstr.c
@@ -0,0 +1,71 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Utility routines.
+ *
+ * Copyright (C) 2008 Bernhard Reutner-Fischer
+ *
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
+ */
+
+#ifdef __DO_STRRSTR_TEST
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#else
+#include "libbb.h"
+#endif
+
+/*
+ * The strrstr() function finds the last occurrence of the substring needle
+ * in the string haystack. The terminating nul characters are not compared.
+ */
+char* FAST_FUNC strrstr(const char *haystack, const char *needle)
+{
+	char *r = NULL;
+
+	if (!needle[0])
+		return (char*)haystack + strlen(haystack);
+	while (1) {
+		char *p = strstr(haystack, needle);
+		if (!p)
+			return r;
+		r = p;
+		haystack = p + 1;
+	}
+}
+
+#ifdef __DO_STRRSTR_TEST
+int main(int argc, char **argv)
+{
+	static const struct {
+		const char *h, *n;
+		int pos;
+	} test_array[] = {
+		/* 0123456789 */
+		{ "baaabaaab",  "aaa", 5  },
+		{ "baaabaaaab", "aaa", 6  },
+		{ "baaabaab",   "aaa", 1  },
+		{ "aaa",        "aaa", 0  },
+		{ "aaa",        "a",   2  },
+		{ "aaa",        "bbb", -1 },
+		{ "a",          "aaa", -1 },
+		{ "aaa",        "",    3  },
+		{ "",           "aaa", -1 },
+		{ "",           "",    0  },
+	};
+
+	int i;
+
+	i = 0;
+	while (i < sizeof(test_array) / sizeof(test_array[0])) {
+		const char *r = strrstr(test_array[i].h, test_array[i].n);
+		printf("'%s' vs. '%s': '%s' - ", test_array[i].h, test_array[i].n, r);
+		if (r == NULL)
+			r = test_array[i].h - 1;
+		printf("%s\n", r == test_array[i].h + test_array[i].pos ? "PASSED" : "FAILED");
+		i++;
+	}
+
+	return 0;
+}
+#endif