From fe49471cfa7fe0618615c065f4c0ad04e888bf92 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 7 Aug 2022 12:24:39 -0700
Subject: [PATCH 1/2] rules: Drop using register keyword

This is a deprecated keyword

Upstream-Status: Submitted [https://github.com/cracklib/cracklib/pull/48]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 src/lib/rules.c | 94 ++++++++++++++++++++++++-------------------------
 1 file changed, 47 insertions(+), 47 deletions(-)

diff --git a/lib/rules.c b/lib/rules.c
index 3a2aa46..6e7a12a 100644
--- a/lib/rules.c
+++ b/lib/rules.c
@@ -67,8 +67,8 @@ Suffix(myword, suffix)
     char *myword;
     char *suffix;
 {
-    register int i;
-    register int j;
+    int i;
+    int j;
     i = strlen(myword);
     j = strlen(suffix);
 
@@ -83,10 +83,10 @@ Suffix(myword, suffix)
 
 char *
 Reverse(str)			/* return a pointer to a reversal */
-    register char *str;
+    char *str;
 {
-    register int i;
-    register int j;
+    int i;
+    int j;
     static char area[STRINGSIZE];
     j = i = strlen(str);
     while (*str)
@@ -99,9 +99,9 @@ Reverse(str)			/* return a pointer to a reversal */
 
 char *
 Uppercase(str)			/* return a pointer to an uppercase */
-    register char *str;
+    char *str;
 {
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE];
     ptr = area;
     while (*str)
@@ -116,9 +116,9 @@ Uppercase(str)			/* return a pointer to an uppercase */
 
 char *
 Lowercase(str)			/* return a pointer to an lowercase */
-    register char *str;
+    char *str;
 {
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE];
     ptr = area;
     while (*str)
@@ -133,9 +133,9 @@ Lowercase(str)			/* return a pointer to an lowercase */
 
 char *
 Capitalise(str)			/* return a pointer to an capitalised */
-    register char *str;
+    char *str;
 {
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE];
     ptr = area;
 
@@ -152,9 +152,9 @@ Capitalise(str)			/* return a pointer to an capitalised */
 
 char *
 Pluralise(string)		/* returns a pointer to a plural */
-    register char *string;
+    char *string;
 {
-    register int length;
+    int length;
     static char area[STRINGSIZE];
     length = strlen(string);
     strcpy(area, string);
@@ -193,11 +193,11 @@ Pluralise(string)		/* returns a pointer to a plural */
 
 char *
 Substitute(string, old, new)	/* returns pointer to a swapped about copy */
-    register char *string;
-    register char old;
-    register char new;
+    char *string;
+    char old;
+    char new;
 {
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE];
     ptr = area;
     while (*string)
@@ -211,11 +211,11 @@ Substitute(string, old, new)	/* returns pointer to a swapped about copy */
 
 char *
 Purge(string, target)		/* returns pointer to a purged copy */
-    register char *string;
-    register char target;
+    char *string;
+    char target;
 {
-    register char *ptr;
-    static char area[STRINGSIZE];
+    char *ptr;
+    char area[STRINGSIZE];
     ptr = area;
     while (*string)
     {
@@ -238,11 +238,11 @@ Purge(string, target)		/* returns pointer to a purged copy */
 
 int
 MatchClass(class, input)
-    register char class;
-    register char input;
+    char class;
+    char input;
 {
-    register char c;
-    register int retval;
+    char c;
+    int retval;
     retval = 0;
 
     switch (class)
@@ -357,8 +357,8 @@ MatchClass(class, input)
 
 char *
 PolyStrchr(string, class)
-    register char *string;
-    register char class;
+    char *string;
+    char class;
 {
     while (*string)
     {
@@ -373,11 +373,11 @@ PolyStrchr(string, class)
 
 char *
 PolySubst(string, class, new)	/* returns pointer to a swapped about copy */
-    register char *string;
-    register char class;
-    register char new;
+    char *string;
+    char class;
+    char new;
 {
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE];
     ptr = area;
     while (*string)
@@ -391,10 +391,10 @@ PolySubst(string, class, new)	/* returns pointer to a swapped about copy */
 
 char *
 PolyPurge(string, class)	/* returns pointer to a purged copy */
-    register char *string;
-    register char class;
+    char *string;
+    char class;
 {
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE];
     ptr = area;
     while (*string)
@@ -433,7 +433,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
     char *control;
 {
     int limit;
-    register char *ptr;
+    char *ptr;
     static char area[STRINGSIZE * 2] = {0};
     char area2[STRINGSIZE * 2] = {0};
     strcpy(area, input);
@@ -523,7 +523,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 		return NULL;
 	    } else
 	    {
-		register char *string;
+		char *string;
 		string = area;
 		while (*(string++));
 		string[-1] = *(++ptr);
@@ -537,7 +537,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 		return NULL;
 	    } else
 	    {
-		register int i;
+		int i;
 		int start;
 		int length;
 		start = Char2Int(*(++ptr));
@@ -563,7 +563,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 		return NULL;
 	    } else
 	    {
-		register int i;
+		int i;
 		i = Char2Int(*(++ptr));
 		if (i < 0)
 		{
@@ -587,9 +587,9 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 		return NULL;
 	    } else
 	    {
-		register int i;
-		register char *p1;
-		register char *p2;
+		int i;
+		char *p1;
+		char *p2;
 		i = Char2Int(*(++ptr));
 		if (i < 0)
 		{
@@ -696,7 +696,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 		return NULL;
 	    } else
 	    {
-		register int i;
+		int i;
 		if ((i = Char2Int(ptr[1])) < 0)
 		{
 		    Debug(1, "Mangle: '=' weird argument in '%s'\n", control);
@@ -723,7 +723,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 	case RULE_DFIRST:
 	    if (area[0])
 	    {
-		register int i;
+		int i;
 		for (i = 1; area[i]; i++)
 		{
 		    area[i - 1] = area[i];
@@ -735,7 +735,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 	case RULE_DLAST:
 	    if (area[0])
 	    {
-		register int i;
+		int i;
 		for (i = 1; area[i]; i++);
 		area[i - 1] = '\0';
 	    }
@@ -771,7 +771,7 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 		return NULL;
 	    } else
 	    {
-		register int i;
+		int i;
 
 		for (i = 0; area[i]; i++);
 
@@ -815,8 +815,8 @@ Mangle(input, control)		/* returns a pointer to a controlled Mangle */
 
 int
 PMatch(control, string)
-register char *control;
-register char *string;
+char *control;
+char *string;
 {
     while (*string && *control)
     {
-- 
2.37.1

