#include "os_regex.h"
#include "os_regex_internal.h"
-/* Prototype fo the _OsMatch */
-int _OS_Match(char *pattern, char *str, int str_len, int size);
-int _os_strncmp(char *pattern, char *str, int str_len, int size);
-int _os_strcmp_last(char *pattern, char *str, int str_len, int size);
-int _os_strcmp(char *pattern, char *str, int str_len, int size);
-int _os_strmatch(char *pattern, char *str, int str_len, int size);
-int _os_strstr(char *pattern, char *str, int str_len, int size);
-
-
/** int OSMatch_Compile(char *pattern, OSMatch *reg, int flags) v0.1
* Compile a pattern to be used later.
* Allowed flags are:
* Returns 1 on success or 0 on error.
* The error code is set on reg->error.
*/
-int OSMatch_Compile(char *pattern, OSMatch *reg, int flags)
+int OSMatch_Compile(const char *pattern, OSMatch *reg, int flags)
{
int usstrstr = 0;
- int i = 0;
- int count = 0;
+ size_t i = 0;
+ size_t count = 0;
int end_of_string = 0;
-
+
char *pt;
char *new_str;
char *new_str_free = NULL;
-
+
/* Checking for references not initialized */
if(reg == NULL)
{
return(0);
}
-
+
/* Initializing OSRegex structure */
reg->error = 0;
reg->patterns = NULL;
reg->size = NULL;
+ reg->match_fp = NULL;
/* The pattern can't be null */
reg->error = OS_REGEX_MAXSIZE;
goto compile_error;
}
-
-
+
+
/* Duping the pattern for our internal work */
new_str = strdup(pattern);
if(!new_str)
}
new_str_free = new_str;
pt = new_str;
-
-
+
+
/* Getting the number of sub patterns */
while(*pt != '\0')
{
- /* The pattern must be always lower case if
+ /* The pattern must be always lower case if
* case sensitive is set
*/
if(!(flags & OS_CASE_SENSITIVE))
{
- *pt = charmap[(uchar)*pt];
+ *pt = (char) charmap[(uchar)*pt];
}
-
- /* Number of sub patterns */
+
+ /* Number of sub patterns */
if(*pt == OR)
{
count++;
{
usstrstr = 1;
}
- pt++;
+ pt++;
}
-
-
+
+
/* For the last pattern */
count++;
- reg->patterns = calloc(count +1, sizeof(char *));
- reg->size = calloc(count +1, sizeof(int));
- reg->match_fp = calloc(count +1, sizeof(void *));
-
-
+ reg->patterns = (char **) calloc(count +1, sizeof(char *));
+ reg->size = (size_t *) calloc(count +1, sizeof(size_t));
+ reg->match_fp = (int (**)(const char *, const char *, size_t, size_t)) calloc(count +1, sizeof(void *));
+
+
/* Memory allocation error check */
if(!reg->patterns || !reg->size || !reg->match_fp)
{
reg->size[i] = 0;
}
i = 0;
-
-
+
+
/* Reassigning pt to the beginning of the string */
pt = new_str;
-
+
/* Getting the sub patterns */
do
{
/* Dupping the string */
if(*new_str == BEGINREGEX)
reg->patterns[i] = strdup(new_str +1);
- else
+ else
reg->patterns[i] = strdup(new_str);
/* Memory error */
reg->match_fp[i] = _os_strstr;
reg->size[i] = strlen(reg->patterns[i]);
}
-
+
else
{
reg->match_fp[i] = _OS_Match;
/* Success return */
free(new_str_free);
return(1);
-
-
+
+
/* Error handling */
compile_error:
-
+
if(new_str_free)
{
free(new_str_free);
}
-
+
OSMatch_FreePattern(reg);
return(0);