if LF_ISSET(OS_DEF) { if (LF_ISSET(OS_FREE) && op->o_def.str != NULL) free(op->o_def.str); if (LF_ISSET(OS_STR | OS_STRDUP))
if LF_ISSET(OS_DEF) if (LF_ISSET(OS_STR | OS_STRDUP)) { if (!LF_ISSET(OS_NOFREE) && op->o_def.str != NULL) free(op->o_def.str);
o_set(sp, opt, flags, str, val)	SCR *sp;	int opt;	u_int flags;	char *str;	u_long val;{	OPTION *op;	/* Set a pointer to the options area. */	op = F_ISSET(&sp->opts[opt], OPT_GLOBAL) ?	    &sp->gp->opts[sp->opts[opt].o_cur.val] : &sp->opts[opt];	/* Copy the string, if requested. */	if (LF_ISSET(OS_STRDUP) && (str = strdup(str)) == NULL) {		msgq(sp, M_SYSERR, NULL);		return (1);	}	/* Free the previous string, if requested, and set the value. */	if LF_ISSET(OS_DEF) {		if (LF_ISSET(OS_FREE) && op->o_def.str != NULL)			free(op->o_def.str);		if (LF_ISSET(OS_STR | OS_STRDUP))			op->o_def.str = str;		else			op->o_def.val = val;	} else {		if (LF_ISSET(OS_FREE) && op->o_cur.str != NULL)			free(op->o_cur.str);		if (LF_ISSET(OS_STR | OS_STRDUP))			op->o_cur.str = str;		else			op->o_cur.val = val;	}	return (0);}