mirror of
https://github.com/tailix/libkernaux.git
synced 2026-08-15 11:00:07 -04:00
Main: include/kernaux/printf_fmt.h: Rename functions
This commit is contained in:
parent
b85d80a0ca
commit
81b6109031
8 changed files with 85 additions and 80 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
2022-05-28 Alex Kotov <kotovalexarian@gmail.com>
|
||||||
|
|
||||||
|
* include/kernaux/printf_fmt.h: Rename functions
|
||||||
|
|
||||||
2022-05-24 Alex Kotov <kotovalexarian@gmail.com>
|
2022-05-24 Alex Kotov <kotovalexarian@gmail.com>
|
||||||
|
|
||||||
* src/multiboot2/info_is_valid.c: Fix division by zero
|
* src/multiboot2/info_is_valid.c: Fix division by zero
|
||||||
|
|
|
||||||
|
|
@ -8,17 +8,17 @@ int main()
|
||||||
const char *format = "s";
|
const char *format = "s";
|
||||||
|
|
||||||
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
||||||
KernAux_PrintfFmt_Spec_eval_flags(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_flags(&spec, &format);
|
||||||
if (KernAux_PrintfFmt_Spec_eval_width1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_width(&spec, &format)) {
|
||||||
// Actually this line won't be executed.
|
// Actually this line won't be executed.
|
||||||
KernAux_PrintfFmt_Spec_eval_width2(&spec, 0);
|
KernAux_PrintfFmt_Spec_set_width(&spec, 0);
|
||||||
}
|
}
|
||||||
if (KernAux_PrintfFmt_Spec_eval_precision1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_precision(&spec, &format)) {
|
||||||
// Actually this line won't be executed.
|
// Actually this line won't be executed.
|
||||||
KernAux_PrintfFmt_Spec_eval_precision2(&spec, 0);
|
KernAux_PrintfFmt_Spec_set_precision(&spec, 0);
|
||||||
}
|
}
|
||||||
KernAux_PrintfFmt_Spec_eval_length(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_length(&spec, &format);
|
||||||
KernAux_PrintfFmt_Spec_eval_type(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_type(&spec, &format);
|
||||||
|
|
||||||
assert(spec.flags == 0);
|
assert(spec.flags == 0);
|
||||||
assert(spec.width == 0);
|
assert(spec.width == 0);
|
||||||
|
|
@ -31,17 +31,17 @@ int main()
|
||||||
const char *format = "012.34f";
|
const char *format = "012.34f";
|
||||||
|
|
||||||
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
||||||
KernAux_PrintfFmt_Spec_eval_flags(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_flags(&spec, &format);
|
||||||
if (KernAux_PrintfFmt_Spec_eval_width1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_width(&spec, &format)) {
|
||||||
// Actually this line won't be executed.
|
// Actually this line won't be executed.
|
||||||
KernAux_PrintfFmt_Spec_eval_width2(&spec, 0);
|
KernAux_PrintfFmt_Spec_set_width(&spec, 0);
|
||||||
}
|
}
|
||||||
if (KernAux_PrintfFmt_Spec_eval_precision1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_precision(&spec, &format)) {
|
||||||
// Actually this line won't be executed.
|
// Actually this line won't be executed.
|
||||||
KernAux_PrintfFmt_Spec_eval_precision2(&spec, 0);
|
KernAux_PrintfFmt_Spec_set_precision(&spec, 0);
|
||||||
}
|
}
|
||||||
KernAux_PrintfFmt_Spec_eval_length(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_length(&spec, &format);
|
||||||
KernAux_PrintfFmt_Spec_eval_type(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_type(&spec, &format);
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
spec.flags ==
|
spec.flags ==
|
||||||
|
|
@ -60,15 +60,15 @@ int main()
|
||||||
const char *format = " *.*ld";
|
const char *format = " *.*ld";
|
||||||
|
|
||||||
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
||||||
KernAux_PrintfFmt_Spec_eval_flags(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_flags(&spec, &format);
|
||||||
if (KernAux_PrintfFmt_Spec_eval_width1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_width(&spec, &format)) {
|
||||||
KernAux_PrintfFmt_Spec_eval_width2(&spec, 12);
|
KernAux_PrintfFmt_Spec_set_width(&spec, 12);
|
||||||
}
|
}
|
||||||
if (KernAux_PrintfFmt_Spec_eval_precision1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_precision(&spec, &format)) {
|
||||||
KernAux_PrintfFmt_Spec_eval_precision2(&spec, 34);
|
KernAux_PrintfFmt_Spec_set_precision(&spec, 34);
|
||||||
}
|
}
|
||||||
KernAux_PrintfFmt_Spec_eval_length(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_length(&spec, &format);
|
||||||
KernAux_PrintfFmt_Spec_eval_type(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_type(&spec, &format);
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
spec.flags ==
|
spec.flags ==
|
||||||
|
|
|
||||||
|
|
@ -46,13 +46,14 @@ struct KernAux_PrintfFmt_Spec {
|
||||||
struct KernAux_PrintfFmt_Spec KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec KernAux_PrintfFmt_Spec_create();
|
||||||
void KernAux_PrintfFmt_Spec_init(struct KernAux_PrintfFmt_Spec *spec);
|
void KernAux_PrintfFmt_Spec_init(struct KernAux_PrintfFmt_Spec *spec);
|
||||||
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_flags(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
void KernAux_PrintfFmt_Spec_parse_flags(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
||||||
bool KernAux_PrintfFmt_Spec_eval_width1(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
bool KernAux_PrintfFmt_Spec_parse_width(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
||||||
void KernAux_PrintfFmt_Spec_eval_width2(struct KernAux_PrintfFmt_Spec *spec, int width);
|
bool KernAux_PrintfFmt_Spec_parse_precision(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
||||||
bool KernAux_PrintfFmt_Spec_eval_precision1(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
void KernAux_PrintfFmt_Spec_parse_length(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
||||||
void KernAux_PrintfFmt_Spec_eval_precision2(struct KernAux_PrintfFmt_Spec *spec, int precision);
|
void KernAux_PrintfFmt_Spec_parse_type(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
||||||
void KernAux_PrintfFmt_Spec_eval_length(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_type(struct KernAux_PrintfFmt_Spec *spec, const char **format);
|
void KernAux_PrintfFmt_Spec_set_width(struct KernAux_PrintfFmt_Spec *spec, int width);
|
||||||
|
void KernAux_PrintfFmt_Spec_set_precision(struct KernAux_PrintfFmt_Spec *spec, int precision);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,13 @@ have_func 'kernaux_snprintf'
|
||||||
|
|
||||||
# TODO: do something if not found?
|
# TODO: do something if not found?
|
||||||
have_func 'KernAux_PrintfFmt_Spec_create'
|
have_func 'KernAux_PrintfFmt_Spec_create'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_flags'
|
have_func 'KernAux_PrintfFmt_Spec_parse_flags'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_width1'
|
have_func 'KernAux_PrintfFmt_Spec_parse_width'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_width2'
|
have_func 'KernAux_PrintfFmt_Spec_parse_precision'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_precision1'
|
have_func 'KernAux_PrintfFmt_Spec_parse_length'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_precision2'
|
have_func 'KernAux_PrintfFmt_Spec_parse_type'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_length'
|
have_func 'KernAux_PrintfFmt_Spec_set_width'
|
||||||
have_func 'KernAux_PrintfFmt_Spec_eval_type'
|
have_func 'KernAux_PrintfFmt_Spec_set_precision'
|
||||||
|
|
||||||
have_func 'kernaux_cmdline'
|
have_func 'kernaux_cmdline'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,11 +42,11 @@ VALUE rb_KernAux_snprintf1(
|
||||||
if (*(fmt++) != '%') rb_raise(rb_eArgError, "invalid format");
|
if (*(fmt++) != '%') rb_raise(rb_eArgError, "invalid format");
|
||||||
|
|
||||||
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
||||||
KernAux_PrintfFmt_Spec_eval_flags(&spec, &fmt);
|
KernAux_PrintfFmt_Spec_parse_flags(&spec, &fmt);
|
||||||
const bool has_width = KernAux_PrintfFmt_Spec_eval_width1(&spec, &fmt);
|
const bool has_width = KernAux_PrintfFmt_Spec_parse_width(&spec, &fmt);
|
||||||
const bool has_precision = KernAux_PrintfFmt_Spec_eval_precision1(&spec, &fmt);
|
const bool has_precision = KernAux_PrintfFmt_Spec_parse_precision(&spec, &fmt);
|
||||||
KernAux_PrintfFmt_Spec_eval_length(&spec, &fmt);
|
KernAux_PrintfFmt_Spec_parse_length(&spec, &fmt);
|
||||||
KernAux_PrintfFmt_Spec_eval_type(&spec, &fmt);
|
KernAux_PrintfFmt_Spec_parse_type(&spec, &fmt);
|
||||||
|
|
||||||
while (*fmt) {
|
while (*fmt) {
|
||||||
if (*(fmt++) == '%') rb_raise(rb_eArgError, "invalid format");
|
if (*(fmt++) == '%') rb_raise(rb_eArgError, "invalid format");
|
||||||
|
|
@ -54,10 +54,10 @@ VALUE rb_KernAux_snprintf1(
|
||||||
|
|
||||||
int arg_index = 2;
|
int arg_index = 2;
|
||||||
if (has_width && argc > arg_index) {
|
if (has_width && argc > arg_index) {
|
||||||
KernAux_PrintfFmt_Spec_eval_width2(&spec, NUM2INT(argv_rb[arg_index++]));
|
KernAux_PrintfFmt_Spec_set_width(&spec, NUM2INT(argv_rb[arg_index++]));
|
||||||
}
|
}
|
||||||
if (has_precision && argc > arg_index) {
|
if (has_precision && argc > arg_index) {
|
||||||
KernAux_PrintfFmt_Spec_eval_precision2(&spec, NUM2INT(argv_rb[arg_index++]));
|
KernAux_PrintfFmt_Spec_set_precision(&spec, NUM2INT(argv_rb[arg_index++]));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DynArg dynarg = DynArg_create();
|
struct DynArg dynarg = DynArg_create();
|
||||||
|
|
|
||||||
14
src/printf.c
14
src/printf.c
|
|
@ -153,19 +153,19 @@ int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const char*
|
||||||
|
|
||||||
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
||||||
|
|
||||||
KernAux_PrintfFmt_Spec_eval_flags(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_flags(&spec, &format);
|
||||||
|
|
||||||
if (KernAux_PrintfFmt_Spec_eval_width1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_width(&spec, &format)) {
|
||||||
KernAux_PrintfFmt_Spec_eval_width2(&spec, va_arg(va, int));
|
KernAux_PrintfFmt_Spec_set_width(&spec, va_arg(va, int));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KernAux_PrintfFmt_Spec_eval_precision1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_precision(&spec, &format)) {
|
||||||
KernAux_PrintfFmt_Spec_eval_precision2(&spec, va_arg(va, int));
|
KernAux_PrintfFmt_Spec_set_precision(&spec, va_arg(va, int));
|
||||||
}
|
}
|
||||||
|
|
||||||
KernAux_PrintfFmt_Spec_eval_length(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_length(&spec, &format);
|
||||||
|
|
||||||
KernAux_PrintfFmt_Spec_eval_type(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_type(&spec, &format);
|
||||||
|
|
||||||
// evaluate specifier
|
// evaluate specifier
|
||||||
switch (spec.type) {
|
switch (spec.type) {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ void KernAux_PrintfFmt_Spec_init(struct KernAux_PrintfFmt_Spec *const spec)
|
||||||
spec->base = 0;
|
spec->base = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_flags(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
void KernAux_PrintfFmt_Spec_parse_flags(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
||||||
{
|
{
|
||||||
KERNAUX_NOTNULL_RETURN(spec);
|
KERNAUX_NOTNULL_RETURN(spec);
|
||||||
KERNAUX_NOTNULL_RETURN(format);
|
KERNAUX_NOTNULL_RETURN(format);
|
||||||
|
|
@ -54,7 +54,7 @@ void KernAux_PrintfFmt_Spec_eval_flags(struct KernAux_PrintfFmt_Spec *const spec
|
||||||
} while (running);
|
} while (running);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KernAux_PrintfFmt_Spec_eval_width1(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
bool KernAux_PrintfFmt_Spec_parse_width(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
||||||
{
|
{
|
||||||
KERNAUX_NOTNULL_RETVAL(spec, false);
|
KERNAUX_NOTNULL_RETVAL(spec, false);
|
||||||
KERNAUX_NOTNULL_RETVAL(format, false);
|
KERNAUX_NOTNULL_RETVAL(format, false);
|
||||||
|
|
@ -71,19 +71,7 @@ bool KernAux_PrintfFmt_Spec_eval_width1(struct KernAux_PrintfFmt_Spec *const spe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_width2(struct KernAux_PrintfFmt_Spec *const spec, const int width)
|
bool KernAux_PrintfFmt_Spec_parse_precision(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
||||||
{
|
|
||||||
KERNAUX_NOTNULL_RETURN(spec);
|
|
||||||
|
|
||||||
if (width < 0) {
|
|
||||||
spec->flags |= KERNAUX_PRINTF_FMT_FLAGS_LEFT; // reverse padding
|
|
||||||
spec->width = (unsigned int)-width;
|
|
||||||
} else {
|
|
||||||
spec->width = (unsigned int)width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool KernAux_PrintfFmt_Spec_eval_precision1(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
|
||||||
{
|
{
|
||||||
KERNAUX_NOTNULL_RETVAL(spec, false);
|
KERNAUX_NOTNULL_RETVAL(spec, false);
|
||||||
KERNAUX_NOTNULL_RETVAL(format, false);
|
KERNAUX_NOTNULL_RETVAL(format, false);
|
||||||
|
|
@ -106,14 +94,7 @@ bool KernAux_PrintfFmt_Spec_eval_precision1(struct KernAux_PrintfFmt_Spec *const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_precision2(struct KernAux_PrintfFmt_Spec *const spec, const int precision)
|
void KernAux_PrintfFmt_Spec_parse_length(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
||||||
{
|
|
||||||
KERNAUX_NOTNULL_RETURN(spec);
|
|
||||||
|
|
||||||
spec->precision = precision > 0 ? (unsigned int)precision : 0u;
|
|
||||||
}
|
|
||||||
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_length(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
|
||||||
{
|
{
|
||||||
KERNAUX_NOTNULL_RETURN(spec);
|
KERNAUX_NOTNULL_RETURN(spec);
|
||||||
KERNAUX_NOTNULL_RETURN(format);
|
KERNAUX_NOTNULL_RETURN(format);
|
||||||
|
|
@ -163,7 +144,7 @@ void KernAux_PrintfFmt_Spec_eval_length(struct KernAux_PrintfFmt_Spec *const spe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KernAux_PrintfFmt_Spec_eval_type(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
void KernAux_PrintfFmt_Spec_parse_type(struct KernAux_PrintfFmt_Spec *const spec, const char **const format)
|
||||||
{
|
{
|
||||||
KERNAUX_NOTNULL_RETURN(spec);
|
KERNAUX_NOTNULL_RETURN(spec);
|
||||||
KERNAUX_NOTNULL_RETURN(format);
|
KERNAUX_NOTNULL_RETURN(format);
|
||||||
|
|
@ -268,6 +249,25 @@ void KernAux_PrintfFmt_Spec_eval_type(struct KernAux_PrintfFmt_Spec *const spec,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KernAux_PrintfFmt_Spec_set_width(struct KernAux_PrintfFmt_Spec *const spec, const int width)
|
||||||
|
{
|
||||||
|
KERNAUX_NOTNULL_RETURN(spec);
|
||||||
|
|
||||||
|
if (width < 0) {
|
||||||
|
spec->flags |= KERNAUX_PRINTF_FMT_FLAGS_LEFT; // reverse padding
|
||||||
|
spec->width = (unsigned int)-width;
|
||||||
|
} else {
|
||||||
|
spec->width = (unsigned int)width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KernAux_PrintfFmt_Spec_set_precision(struct KernAux_PrintfFmt_Spec *const spec, const int precision)
|
||||||
|
{
|
||||||
|
KERNAUX_NOTNULL_RETURN(spec);
|
||||||
|
|
||||||
|
spec->precision = precision > 0 ? (unsigned int)precision : 0u;
|
||||||
|
}
|
||||||
|
|
||||||
// internal ASCII string to unsigned int conversion
|
// internal ASCII string to unsigned int conversion
|
||||||
unsigned int _atoi(const char** str)
|
unsigned int _atoi(const char** str)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,15 +13,15 @@ int main()
|
||||||
const char *format = {{ escape_str(case.in.format) }};
|
const char *format = {{ escape_str(case.in.format) }};
|
||||||
|
|
||||||
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
struct KernAux_PrintfFmt_Spec spec = KernAux_PrintfFmt_Spec_create();
|
||||||
KernAux_PrintfFmt_Spec_eval_flags(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_flags(&spec, &format);
|
||||||
if (KernAux_PrintfFmt_Spec_eval_width1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_width(&spec, &format)) {
|
||||||
KernAux_PrintfFmt_Spec_eval_width2(&spec, {{ none_to_zero(case.in.width) }});
|
KernAux_PrintfFmt_Spec_set_width(&spec, {{ none_to_zero(case.in.width) }});
|
||||||
}
|
}
|
||||||
if (KernAux_PrintfFmt_Spec_eval_precision1(&spec, &format)) {
|
if (KernAux_PrintfFmt_Spec_parse_precision(&spec, &format)) {
|
||||||
KernAux_PrintfFmt_Spec_eval_precision2(&spec, {{ none_to_zero(case.in.precision) }});
|
KernAux_PrintfFmt_Spec_set_precision(&spec, {{ none_to_zero(case.in.precision) }});
|
||||||
}
|
}
|
||||||
KernAux_PrintfFmt_Spec_eval_length(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_length(&spec, &format);
|
||||||
KernAux_PrintfFmt_Spec_eval_type(&spec, &format);
|
KernAux_PrintfFmt_Spec_parse_type(&spec, &format);
|
||||||
|
|
||||||
assert(spec.flags == {{ escape_flags(case.out.flags) }});
|
assert(spec.flags == {{ escape_flags(case.out.flags) }});
|
||||||
assert(spec.width == {{ case.out.width }});
|
assert(spec.width == {{ case.out.width }});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue