V10/cmd/spitbol/rdenv.c

/*
 *	rdenv ( varname, result ) - read the environment variable named
 *		"varname", and if it can be read, put its value in "result"
 *		return 0 on success, -1 on failure
 */

#include "spitblks.h"

/* the environment pointer */
extern char **environ;

rdenv ( varname, result )
	register struct scblk *varname, *result;
{
	register n;
	register char *p, *q, **env;

	/* one iteration per environment variable */
	env = environ;
	while ( p = *env ) {
		q = varname -> str;
		n = varname -> len;

		/* match the variable against the environment */
		while ( n > 0 && *p == *q && *p != '\0' && *p != '=' ) {
			p++;
			q++;
			n--;
		}

		/* if successful, copy result and return */
		if ( *p == '=' && n == 0 ) {
			p++;
			q = result -> str;
			while ( *p != '\0' && n < result -> len ) {
				*q++ = *p++;
				n++;
			}
			result -> len = n;
			return 0;
		}

		env++;
	}

	return -1;
}