Use the strchr() function instead of the legacy index() function.

Signed-off-by: Frederik Pasch <fpasch@googlemail.com>
--- 1/utils/mountd/fsloc.c
+++ 2/utils/mountd/fsloc.c
@@ -126,7 +126,7 @@
 	struct servers *rv=NULL;
 
 	xlog(L_NOTICE, "method_list(%s)\n", data);
-	for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
+	for (ptr--, listsize=1; ptr; ptr=strchr(ptr, ':'), listsize++)
 		ptr++;
 	list = malloc(listsize * sizeof(char *));
 	copy = strdup(data);
--- 1/support/nfs/nfs_mntent.c
+++ 2/support/nfs/nfs_mntent.c
@@ -9,7 +9,7 @@
  */
 
 #include <stdio.h>
-#include <string.h>		/* for index */
+#include <string.h>		/* for strchr */
 #include <ctype.h>		/* for isdigit */
 #include <sys/stat.h>		/* for umask */
 
@@ -163,7 +163,7 @@
 			return NULL;
 
 		mfp->mntent_lineno++;
-		s = index (buf, '\n');
+		s = strchr (buf, '\n');
 		if (s == NULL) {
 			/* Missing final newline?  Otherwise extremely */
 			/* long line - assume file was corrupted */
@@ -171,7 +171,7 @@
 				fprintf(stderr, _("[mntent]: warning: no final "
 					"newline at the end of %s\n"),
 					mfp->mntent_file);
-				s = index (buf, 0);
+				s = strchr (buf, 0);
 			} else {
 				mfp->mntent_errs = 1;
 				goto err;
--- 1/utils/mount/error.c
+++ 2/utils/mount/error.c
@@ -62,7 +62,7 @@
 	char *tmp;
 
 	if (estr) {
-		if ((ptr = index(estr, ':')))
+		if ((ptr = strchr(estr, ':')))
 			estr = ++ptr;
 
 		tmp = &errbuf[spos];
