Skip to content

FWriteFmtLn

Description

Write formatted output to a file stream followed by a newline character. Formats the rendered string via the in-tree formatted-write backend and emits the result to the stream, then appends a newline.

Parameters

Name Direction Description
stream in Pointer to the File to write to.
fmtstr in Format string with {} placeholders.

Success

Placeholders in fmtstr are replaced by the passed arguments, and the resulting formatted string followed by a newline is written to the stream.

Failure

Failure might occur during memory allocation for the temporary string or during the write operation to the stream; the backend may also log an error message.

Usage example (Cross-references)

Usage examples (Cross-references)
    
        if (self->about) {
            FWriteFmtLn(&err, "{} -- {}", self->name, self->about);
            FWriteFmtLn(&err, "");
        } else {
        if (self->about) {
            FWriteFmtLn(&err, "{} -- {}", self->name, self->about);
            FWriteFmtLn(&err, "");
        } else {
            FWriteFmtLn(&err, "{}", self->name);
            FWriteFmtLn(&err, "");
        } else {
            FWriteFmtLn(&err, "{}", self->name);
            FWriteFmtLn(&err, "");
        }
        } else {
            FWriteFmtLn(&err, "{}", self->name);
            FWriteFmtLn(&err, "");
        }
        }
    
        FWriteFmtLn(&err, "{}", usage);
        StrDeinit(&usage);
        FWriteFmtLn(&err, "");
        FWriteFmtLn(&err, "{}", usage);
        StrDeinit(&usage);
        FWriteFmtLn(&err, "");
    
        // Two-pass: compute max left-column width, then re-emit with
                continue;
            if (!printed_positional_header) {
                FWriteFmtLn(&err, "positional arguments:");
                printed_positional_header = true;
            }
            for (u64 pad = left_w[i]; pad < max_w + 2; ++pad)
                FWriteFmt(&err, " ");
            FWriteFmtLn(&err, "{}", sp->help ? sp->help : "");
        }
        if (printed_positional_header)
        }
        if (printed_positional_header)
            FWriteFmtLn(&err, "");
    
        for (u64 i = 0; i < n_specs; ++i) {
                continue;
            if (!printed_options_header) {
                FWriteFmtLn(&err, "options:");
                printed_options_header = true;
            }
            for (u64 pad = left_w[i]; pad < max_w + 2; ++pad)
                FWriteFmt(&err, " ");
            FWriteFmtLn(&err, "{}", sp->help ? sp->help : "");
        }
                u64 n = (u64)(eq - tok);
                if (n >= 128) {
                    FWriteFmtLn(err, "{}: flag name too long: {}", self->name, tok);
                    break;
                }
            ArgSpec *sp = is_long ? find_long(self, flag) : find_short(self, flag);
            if (!sp) {
                FWriteFmtLn(err, "{}: unknown option: {}", self->name, flag);
                FWriteFmtLn(err, "run with --help for usage");
                break;
            if (!sp) {
                FWriteFmtLn(err, "{}: unknown option: {}", self->name, flag);
                FWriteFmtLn(err, "run with --help for usage");
                break;
            }
                case ARG_ROLE_FLAG : {
                    if (inline_v) {
                        FWriteFmtLn(err, "{}: flag {} does not take a value", self->name, flag);
                        break;
                    }
                case ARG_ROLE_COUNT : {
                    if (inline_v) {
                        FWriteFmtLn(err, "{}: counter {} does not take a value", self->name, flag);
                        break;
                    }
                    if (!val) {
                        if (*i_io + 1 >= argc) {
                            FWriteFmtLn(err, "{}: option {} requires a value", self->name, flag);
                            break;
                        }
                    }
                    if (!store_value(sp->kind, sp->target, val)) {
                        FWriteFmtLn(
                            err,
                            "{}: invalid value '{}' for {}: expected {}",
                case ARG_ROLE_POSITIONAL :
                default :
                    FWriteFmtLn(err, "{}: internal error: positional matched as option", self->name);
                    break;
            }
                ArgSpec *sp = find_short(self, (Zstr)data);
                if (!sp) {
                    FWriteFmtLn(err, "{}: unknown option: {}", self->name, (Zstr)data);
                    break;
                }
                    sp->seen = true;
                } else {
                    FWriteFmtLn(err, "{}: option {} requires a value, can't bundle", self->name, (Zstr)data);
                    break;
                }
                                decision = BUNDLE_TRY;
                            } else {
                                FWriteFmtLn(
                                    &err,
                                    "{}: short value option '{}' cannot be bundled; use form '{} VAL' or '{}=VAL'",
            // Positional (either consumed naturally or forced by "--").
            if (next_positional >= n_positionals) {
                FWriteFmtLn(&err, "{}: unexpected positional argument: {}", self->name, tok);
                return ARG_RUN_ERROR;
            }
            }
            if (!pos) {
                FWriteFmtLn(&err, "{}: internal error: positional slot {} missing", self->name, (u64)next_positional);
                return ARG_RUN_ERROR;
            }
            }
            if (!store_value(pos->kind, pos->target, tok)) {
                FWriteFmtLn(
                    &err,
                    "{}: invalid value '{}' for <{}>: expected {}",
            if ((sp->role == ARG_ROLE_REQUIRED || sp->role == ARG_ROLE_POSITIONAL) && !sp->seen) {
                if (sp->role == ARG_ROLE_POSITIONAL) {
                    FWriteFmtLn(&err, "{}: missing required positional argument <{}>", self->name, sp->long_name);
                } else {
                    FWriteFmtLn(
                    FWriteFmtLn(&err, "{}: missing required positional argument <{}>", self->name, sp->long_name);
                } else {
                    FWriteFmtLn(
                        &err,
                        "{}: missing required option {}",
                    );
                }
                FWriteFmtLn(&err, "run with --help for usage");
                return ARG_RUN_ERROR;
            }
        do {                                                                                                               \
            File UNPL(out) = FileStdout();                                                                                 \
            FWriteFmtLn(&UNPL(out), __VA_ARGS__);                                                                          \
        } while (0)
Last updated on