mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-10-10 00:25:06 -04:00
SPDX is an international standard for documenting software license requirements. Remove the existing headers and replace with a brief SPDX preamble. See: https://spdx.dev/use/specifications/ The script used to convert the files is added to "tools", and the file header templates in headers/ are updated. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
77 lines
1.7 KiB
C
77 lines
1.7 KiB
C
/* SPDX-License-Identifier: BSD-2-Clause */
|
|
/* Copyright 2025 The NASM Authors - All Rights Reserved */
|
|
|
|
#include "compiler.h"
|
|
#include "nasm.h"
|
|
#include "asmutil.h"
|
|
#include "stdscan.h"
|
|
#include "eval.h"
|
|
|
|
/*
|
|
* 1. An expression (true if nonzero 0)
|
|
* 2. The keywords true, on, yes for true
|
|
* 3. The keywords false, off, no for false
|
|
* 4. An empty line, for true
|
|
*
|
|
* This is equivalent to pp_get_boolean_option() outside of the
|
|
* preprocessor.
|
|
*
|
|
* On error, return defval (usually the previous value)
|
|
*
|
|
* If str is NULL, return NULL without changing *val.
|
|
*/
|
|
char *get_boolean_option(const char *str, bool *val)
|
|
{
|
|
static const char * const noyes[] = {
|
|
"no", "yes",
|
|
"false", "true",
|
|
"off", "on"
|
|
};
|
|
struct tokenval tokval;
|
|
expr *evalresult;
|
|
char *p;
|
|
int tt;
|
|
|
|
if (!str)
|
|
return NULL;
|
|
|
|
str = nasm_skip_spaces(str);
|
|
p = nasm_strdup(str);
|
|
|
|
tokval.t_type = TOKEN_INVALID;
|
|
tokval.t_start = str;
|
|
stdscan_reset(p);
|
|
|
|
tt = stdscan(NULL, &tokval);
|
|
if (tt == TOKEN_EOS || tt == ']' || tt == ',') {
|
|
*val = true;
|
|
goto done;
|
|
}
|
|
|
|
if (tt == TOKEN_ID) {
|
|
size_t i;
|
|
for (i = 0; i < ARRAY_SIZE(noyes); i++)
|
|
if (!nasm_stricmp(tokval.t_charptr, noyes[i])) {
|
|
*val = i & 1;
|
|
goto done;
|
|
}
|
|
}
|
|
|
|
evalresult = evaluate(stdscan, NULL, &tokval, NULL, true, NULL);
|
|
|
|
if (!evalresult)
|
|
goto done;
|
|
|
|
if (!is_really_simple(evalresult)) {
|
|
nasm_nonfatal("boolean flag expression must be a constant");
|
|
goto done;
|
|
}
|
|
|
|
*val = reloc_value(evalresult) != 0;
|
|
|
|
done:
|
|
str += nasm_skip_spaces(tokval.t_start) - p;
|
|
nasm_free(p);
|
|
return (char *)str;
|
|
}
|