mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-04 00:14:44 +01:00

Remove conditional logic from the parser and move it to its own class, that way any improvements or conditional features will make cleaner changes. Signed-off-by: Georgia Garcia <georgia.garcia@canonical.com>
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2024
|
|
* Canonical Ltd. (All rights reserved)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of version 2 of the GNU General Public
|
|
* License published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, contact Novell, Inc. or Canonical
|
|
* Ltd.
|
|
*/
|
|
|
|
#include "cond_expr.h"
|
|
#include "parser.h"
|
|
|
|
cond_expr::cond_expr(bool result):
|
|
result(result)
|
|
{
|
|
}
|
|
|
|
cond_expr::cond_expr(const char *var, bool defined)
|
|
{
|
|
char *var_name = process_var(var);
|
|
|
|
if (!defined) {
|
|
int ret = get_boolean_var(var_name);
|
|
if (ret < 0) {
|
|
/* FIXME check for set var */
|
|
free(var_name);
|
|
yyerror(_("Unset boolean variable %s used in if-expression"), var);
|
|
}
|
|
result = ret;
|
|
} else {
|
|
void *set_value = get_set_var(var_name);
|
|
PDEBUG("Matched: defined set expr %s value %lx\n", var_name, (long) set_value);
|
|
result = !! (long) set_value;
|
|
}
|
|
free(var_name);
|
|
}
|