From a03ede1e18493c69f1270f2c8f923aa9652d9b3d Mon Sep 17 00:00:00 2001
From: "David J. Bremer" <dbremer@llnl.gov>
Date: Tue, 12 May 2009 21:35:36 +0000
Subject: [PATCH] Made the slurm_strcasestr, replacing strcasestr, which was
 causing a problem for the AIX build.

---
 src/common/Makefile.am                |  3 +-
 src/common/Makefile.in                |  8 ++--
 src/common/parse_spec.c               |  9 ++--
 src/common/slurm_accounting_storage.c | 11 ++---
 src/common/slurm_strcasestr.c         | 65 +++++++++++++++++++++++++++
 src/common/slurm_strcasestr.h         | 46 +++++++++++++++++++
 6 files changed, 129 insertions(+), 13 deletions(-)
 create mode 100644 src/common/slurm_strcasestr.c
 create mode 100644 src/common/slurm_strcasestr.h

diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 02bd8064f44..50976649aa9 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -102,7 +102,8 @@ libcommon_la_SOURCES = 			\
 	stepd_api.c stepd_api.h		\
 	write_labelled_message.c	\
 	write_labelled_message.h	\
-	proc_args.c proc_args.h		
+	proc_args.c proc_args.h		\
+	slurm_strcasestr.c slurm_strcasestr.h		
 
 EXTRA_libcommon_la_SOURCES = 	\
 	$(extra_unsetenv_src)
diff --git a/src/common/Makefile.in b/src/common/Makefile.in
index 7d9b9f81b74..32ae8009d51 100644
--- a/src/common/Makefile.in
+++ b/src/common/Makefile.in
@@ -116,7 +116,7 @@ am__libcommon_la_SOURCES_DIST = assoc_mgr.c assoc_mgr.h \
 	parse_time.h job_options.c job_options.h global_defaults.c \
 	timers.c timers.h slurm_xlator.h stepd_api.c stepd_api.h \
 	write_labelled_message.c write_labelled_message.h proc_args.c \
-	proc_args.h
+	proc_args.h slurm_strcasestr.c slurm_strcasestr.h
 @HAVE_UNSETENV_FALSE@am__objects_1 = unsetenv.lo
 am_libcommon_la_OBJECTS = assoc_mgr.lo basil_resv_conf.lo xmalloc.lo \
 	xassert.lo xstring.lo xsignal.lo forward.lo strlcpy.lo list.lo \
@@ -134,7 +134,7 @@ am_libcommon_la_OBJECTS = assoc_mgr.lo basil_resv_conf.lo xmalloc.lo \
 	slurm_resource_info.lo hostlist.lo slurm_step_layout.lo \
 	checkpoint.lo select_job_res.lo parse_time.lo job_options.lo \
 	global_defaults.lo timers.lo stepd_api.lo \
-	write_labelled_message.lo proc_args.lo
+	write_labelled_message.lo proc_args.lo slurm_strcasestr.lo
 am__EXTRA_libcommon_la_SOURCES_DIST = unsetenv.c unsetenv.h
 libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS)
 libcommon_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -442,7 +442,8 @@ libcommon_la_SOURCES = \
 	stepd_api.c stepd_api.h		\
 	write_labelled_message.c	\
 	write_labelled_message.h	\
-	proc_args.c proc_args.h		
+	proc_args.c proc_args.h		\
+	slurm_strcasestr.c slurm_strcasestr.h		
 
 EXTRA_libcommon_la_SOURCES = \
 	$(extra_unsetenv_src)
@@ -591,6 +592,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_rlimits_info.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_selecttype_info.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_step_layout.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_strcasestr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurmdbd_defs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stepd_api.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strlcpy.Plo@am__quote@
diff --git a/src/common/parse_spec.c b/src/common/parse_spec.c
index e559d39f7bb..01c1dbbae60 100644
--- a/src/common/parse_spec.c
+++ b/src/common/parse_spec.c
@@ -56,6 +56,7 @@
 #include "src/common/parse_spec.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
+#include "src/common/slurm_strcasestr.h"
 
 
 #define BUFFER_SIZE 1024
@@ -140,7 +141,7 @@ _load_float (float *destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		str_len1 = strlen (keyword);
 		strcpy (scratch, str_ptr1 + str_len1);
@@ -178,7 +179,7 @@ _load_integer (int *destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		str_len1 = strlen (keyword);
 		strcpy (scratch, str_ptr1 + str_len1);
@@ -235,7 +236,7 @@ _load_long (long *destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		str_len1 = strlen (keyword);
 		strcpy (scratch, str_ptr1 + str_len1);
@@ -293,7 +294,7 @@ load_string  (char **destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		int quoted = 0;
 		str_len1 = strlen (keyword);
diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c
index 38b92860b7f..81e6ec1792b 100644
--- a/src/common/slurm_accounting_storage.c
+++ b/src/common/slurm_accounting_storage.c
@@ -58,6 +58,7 @@
 #include "src/common/xstring.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/sacctmgr/sacctmgr.h"
+#include "src/common/slurm_strcasestr.h"
 
 /*
  * Local data
@@ -7277,16 +7278,16 @@ extern uint16_t str_2_classification(char *class)
 	if(!class)
 		return type;
 
-	if(strcasestr(class, "capac"))
+	if(slurm_strcasestr(class, "capac"))
 		type = ACCT_CLASS_CAPACITY;
-	else if(strcasestr(class, "capab"))
+	else if(slurm_strcasestr(class, "capab"))
 		type = ACCT_CLASS_CAPABILITY;
-	else if(strcasestr(class, "capap"))
+	else if(slurm_strcasestr(class, "capap"))
 		type = ACCT_CLASS_CAPAPACITY;
 	
-	if(strcasestr(class, "*")) 
+	if(slurm_strcasestr(class, "*")) 
 		type |= ACCT_CLASSIFIED_FLAG; 
-	else if(strcasestr(class, "class")) 
+	else if(slurm_strcasestr(class, "class")) 
 		type |= ACCT_CLASSIFIED_FLAG;
 	
 	return type;
diff --git a/src/common/slurm_strcasestr.c b/src/common/slurm_strcasestr.c
new file mode 100644
index 00000000000..944b45e6cfe
--- /dev/null
+++ b/src/common/slurm_strcasestr.c
@@ -0,0 +1,65 @@
+/*****************************************************************************\
+ *  slurm_strcasestr.h - case insensitve version of strstr()
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM is free software; you can redistribute it and/or modify it under
+ *  the terms of the GNU General Public License as published by the Free
+ *  Software Foundation; either version 2 of the License, or (at your option)
+ *  any later version.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM is distributed in the hope that it will be useful, but WITHOUT ANY
+ *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ *  details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "slurm_strcasestr.h"
+#include <ctype.h>
+
+/* case insensitve version of strstr() */
+char *
+slurm_strcasestr(char *haystack, char *needle)
+{
+	int hay_inx,  hay_size  = strlen(haystack);
+	int need_inx, need_size = strlen(needle);
+	char *hay_ptr = haystack;
+
+	for (hay_inx=0; hay_inx<hay_size; hay_inx++) {
+		for (need_inx=0; need_inx<need_size; need_inx++) {
+			if (tolower((int) hay_ptr[need_inx]) != 
+			    tolower((int) needle [need_inx]))
+				break;		/* mis-match */
+		}
+
+		if (need_inx == need_size)	/* it matched */
+			return hay_ptr;
+		else				/* keep looking */
+			hay_ptr++;
+	}
+
+	return NULL;	/* no match anywhere in string */
+}
+
diff --git a/src/common/slurm_strcasestr.h b/src/common/slurm_strcasestr.h
new file mode 100644
index 00000000000..79e73090933
--- /dev/null
+++ b/src/common/slurm_strcasestr.h
@@ -0,0 +1,46 @@
+/*****************************************************************************\
+ *  slurm_strcasestr.h - case insensitve version of strstr()
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM is free software; you can redistribute it and/or modify it under
+ *  the terms of the GNU General Public License as published by the Free
+ *  Software Foundation; either version 2 of the License, or (at your option)
+ *  any later version.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM is distributed in the hope that it will be useful, but WITHOUT ANY
+ *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ *  details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _SLURM_STRCASESTR_H
+#define _SLURM_STRCASESTR_H
+
+/* case insensitve version of strstr().  This exists for our AIX
+   builds which are missing the gnu strcasestr function. */
+char *slurm_strcasestr(char *haystack, char *needle);
+
+#endif
-- 
GitLab