#ifdef HAVE_PUTENV
int
set_envvar (int f GCC_UNUSED, int n GCC_UNUSED)
{
	static TBUFF *var, *val;

	char *both;
	int rc;

	if ((rc = mlreply2 ("Environment variable: ", &var)) == ABORT) {
		/* EMPTY */ ;
	} else if ((rc = mlreply2 ("Value: ", &val)) == ABORT) {
		/* EMPTY */ ;
	} else if ((both = typeallocn (char, tb_length (var) + tb_length
		   (val))) == 0) {
		rc = no_memory ("set_envvar");
	} else {
		lsprintf (both, "%s=%s", tb_values (var), tb_values (val));
		putenv (both);	/* this will leak.  i think it has to. */
	}

	return rc;
}
#endif

static LINEPTR
alloc_LINE (BUFFER * bp)
{
	LINEPTR lp;

	if ((lp = bp->b_freeLINEs) != NULL) {
		bp->b_freeLINEs = lp->l_nxtundo;
	} else if ((lp = typealloc (LINE)) == NULL) {
		(void) no_memory ("LINE");
	}
	return lp;
}

static Boolean
SaveConvertedLength (XtPointer * target, unsigned long source)
{
	Boolean result = False;

	*target = XtMalloc (4);
	if (*target != 0) {
		result = True;
		if (sizeof (unsigned long) == 4) {
			*(unsigned long *) *target = source;
		} else if (sizeof (unsigned) == 4) {
			*(unsigned *) *target = (unsigned) source;
		} else if (sizeof (unsigned short) == 4) {
			*(unsigned short *) *target = (unsigned short) source;
		} else {
			/* FIXME - does this depend on byte-order? */
			unsigned long temp = source;

			memcpy ((char *) *target,
				((char *) &temp) + sizeof (temp) - 4,
				(size_t) 4);
		}
	}
	return result;
}
