meillo@0: /*
meillo@0: ** support.c
meillo@0: **
meillo@0: ** Author: Pr Emanuelsson <pell@lysator.liu.se>
meillo@0: ** Hacked by: Peter Eriksson <pen@lysator.liu.se>
meillo@0: */
meillo@0: #include <stdio.h>
meillo@0: #include <ctype.h>
meillo@0: 
meillo@0: #ifdef HAVE_ANSIHEADERS
meillo@0: #  include <stdlib.h>
meillo@0: #  include <string.h>
meillo@0: #else
meillo@0: #  define strchr(str, c) index(str, c)
meillo@0: #endif
meillo@0: 
meillo@0: #define IN_LIBIDENT_SRC
meillo@0: #include "ident.h"
meillo@0: 
meillo@0: 
meillo@10: char*
meillo@10: id_strdup __P1(char *, str)
meillo@0: {
meillo@10: 	char *cp;
meillo@0: 
meillo@10: 	cp = (char *) malloc(strlen(str) + 1);
meillo@10: 	if (cp == NULL) {
meillo@0: #ifdef DEBUG
meillo@10: 		perror("libident: malloc");
meillo@0: #endif
meillo@10: 		return NULL;
meillo@10: 	}
meillo@0: 
meillo@10: 	strcpy(cp, str);
meillo@0: 
meillo@10: 	return cp;
meillo@0: }
meillo@0: 
meillo@0: 
meillo@10: char*
meillo@10: id_strtok __P3(char *, cp, char *, cs, char *, dc)
meillo@0: {
meillo@10: 	static char *bp = 0;
meillo@10: 
meillo@10: 	if (cp)
meillo@10: 		bp = cp;
meillo@10: 
meillo@10: 	/*
meillo@10: 	 ** No delimitor cs - return whole buffer and point at end
meillo@10: 	 */
meillo@10: 	if (!cs) {
meillo@10: 		while (*bp)
meillo@10: 			bp++;
meillo@10: 		return cs;
meillo@10: 	}
meillo@10: 
meillo@10: 	/*
meillo@10: 	 ** Skip leading spaces
meillo@10: 	 */
meillo@10: 	while (isspace(*bp))
meillo@10: 		bp++;
meillo@10: 
meillo@10: 	/*
meillo@10: 	 ** No token found?
meillo@10: 	 */
meillo@10: 	if (!*bp)
meillo@10: 		return 0;
meillo@10: 
meillo@10: 	cp = bp;
meillo@10: 	while (*bp && !strchr(cs, *bp))
meillo@10: 		bp++;
meillo@10: 
meillo@10: 	/*
meillo@10: 	 ** Remove trailing spaces
meillo@10: 	 */
meillo@10: 	*dc = *bp;
meillo@10: 	for (dc = bp - 1; dc > cp && isspace(*dc); dc--);
meillo@10: 	*++dc = '\0';
meillo@10: 
meillo@0: 	bp++;
meillo@10: 
meillo@10: 	return cp;
meillo@0: }