Skip to content

Commit

Permalink
Add missing newlines to some RZ_LOG_* calls (#4439)
Browse files Browse the repository at this point in the history
  • Loading branch information
thestr4ng3r committed Apr 17, 2024
1 parent c5b20a8 commit 2cacf88
Show file tree
Hide file tree
Showing 62 changed files with 138 additions and 139 deletions.
2 changes: 1 addition & 1 deletion librz/arch/asm.c
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ static void unset_plugins_config(RZ_BORROW RzAsm *rz_asm, RZ_BORROW RzConfig *pc
RzListIter *it;
rz_list_foreach (pcfg->nodes, it, n) {
if (!rz_config_rm(conf, n->name)) {
RZ_LOG_WARN("Failed to remove \"%s\" from the global config.", n->name)
RZ_LOG_WARN("Failed to remove \"%s\" from the global config.\n", n->name)
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion librz/arch/dwarf_process.c
Original file line number Diff line number Diff line change
Expand Up @@ -1795,7 +1795,7 @@ static bool store_base_type(void *u, const char *k, const void *v) {
RzPVector *types = (RzPVector *)v;
const ut32 len = rz_pvector_len(types);
if (len == 0) {
RZ_LOG_WARN("BaseType %s has nothing", name);
RZ_LOG_WARN("BaseType %s has nothing\n", name);
} else if (len == 1) {
RzBaseType *t = rz_pvector_head(types);
update_base_type(analysis->typedb, t);
Expand Down
4 changes: 2 additions & 2 deletions librz/arch/esil/esil.c
Original file line number Diff line number Diff line change
Expand Up @@ -888,7 +888,7 @@ static int esil_interrupt_linux_i386(RzAnalysisEsil *esil) { //move this into
}

if (sn != 0x80) {
RZ_LOG_ERROR("Interrupt 0x%x not handled.", sn);
RZ_LOG_ERROR("Interrupt 0x%x not handled.\n", sn);
esil->trap = RZ_ANALYSIS_TRAP_UNHANDLED;
esil->trap_code = sn;
return -1;
Expand Down Expand Up @@ -3093,7 +3093,7 @@ RZ_API int rz_analysis_esil_condition(RzAnalysisEsil *esil, const char *str) {
}
free(popped);
} else {
RZ_LOG_ERROR("Cannot pop because The ESIL stack is empty");
RZ_LOG_ERROR("Cannot pop because The ESIL stack is empty\n");
return -1;
}
return ret;
Expand Down
8 changes: 4 additions & 4 deletions librz/arch/isa/8051/8051_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ static I8051OpAddressing *addressing_pattern1(const ut8 *buf) {
} else if (lo >= 0x8 && lo <= 0xf) {
return addressing_register(I8051_R0 + lo - 0x8);
}
RZ_LOG_DEBUG("invalid addressing pattern 1")
RZ_LOG_DEBUG("invalid addressing pattern 1\n")
return NULL;
}

Expand All @@ -122,7 +122,7 @@ static I8051OpAddressing *addressing_pattern11(const ut8 *buf) {
case 0x3:
return addressing_indirect(addressing_register(I8051_R0 + lo - 0x2));
default:
RZ_LOG_DEBUG("invalid addressing pattern 11")
RZ_LOG_DEBUG("invalid addressing pattern 11\n")
return NULL;
}
}
Expand All @@ -144,7 +144,7 @@ static I8051OpAddressing *addressing_pattern1_imm(const ut8 *buf) {
} else if (lo >= 0x5) {
return addressing_pattern1(buf);
}
RZ_LOG_DEBUG("invalid addressing pattern 1_imm")
RZ_LOG_DEBUG("invalid addressing pattern 1_imm\n")
return NULL;
}

Expand Down Expand Up @@ -526,4 +526,4 @@ RZ_IPI I8051Op *rz_8051_op_parse(RZ_NONNULL RzAnalysis *analysis, RZ_NONNULL con
}

return op;
}
}
2 changes: 1 addition & 1 deletion librz/arch/isa/pyc/opcode.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,6 @@ void(rm_op)(struct op_parameter par) {
op_obj->op_name = rz_str_newf("<%u>", par.op_code);
op_obj->type = op_obj->op_pop = op_obj->op_push = 0;
} else {
RZ_LOG_ERROR("Error in rm_op() while constructing opcodes for .pyc file: \n .op_code = %u, .op_name = %s", par.op_code, par.op_name);
RZ_LOG_ERROR("Error in rm_op() while constructing opcodes for .pyc file: \n .op_code = %u, .op_name = %s\n", par.op_code, par.op_name);
}
}
2 changes: 1 addition & 1 deletion librz/arch/isa/x86/x86_il.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ void label_port(RzILVM *vm, RzILOpEffect *op);
RZ_IPI bool rz_x86_il_opcode(RZ_NONNULL RzAnalysis *analysis, RZ_NONNULL RzAnalysisOp *aop, ut64 pc, RZ_BORROW RZ_NONNULL const X86ILIns *ins) {
rz_return_val_if_fail(analysis && aop && ins && ins->ins_size > 0, false);
if (ins->mnem >= X86_INS_ENDING) {
RZ_LOG_ERROR("RzIL: x86: Invalid instruction type %d", ins->mnem);
RZ_LOG_ERROR("RzIL: x86: Invalid instruction type %d\n", ins->mnem);
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion librz/arch/isa_gnu/z80/z80asm.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ static void readlabel(Z80AssemblerState *state, const char **p, int store, int s
return;
}
if (pos == *p) {
RZ_LOG_ERROR("assembler: z80: `:' found without a label");
RZ_LOG_ERROR("assembler: z80: `:' found without a label\n");
return;
}
if (!store) {
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/dwarf/lists.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ RZ_IPI bool ListsHdr_parse(RzBinDwarfListsHdr *hdr, RzBinEndianReader *R) {
U8_OR_RET_FALSE(hdr->encoding.address_size);
U8_OR_RET_FALSE(hdr->segment_selector_size);
if (hdr->segment_selector_size != 0) {
RZ_LOG_ERROR("Segment selector size not supported: %d", hdr->segment_selector_size);
RZ_LOG_ERROR("Segment selector size not supported: %d\n", hdr->segment_selector_size);
return false;
}
U_OR_RET_FALSE(32, hdr->offset_entry_count);
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/dwarf/loclists.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ static bool RawLocListEntry_parse(
RET_FALSE_IF_FAIL(parse_data(R, &raw->start_length.data, encoding));
break;
case DW_LLE_GNU_view_pair:
RZ_LOG_ERROR("GNU_view_pair not implemented");
RZ_LOG_ERROR("GNU_view_pair not implemented\n");
return false;
}
break;
Expand Down
4 changes: 2 additions & 2 deletions librz/bin/dwarf/op.c
Original file line number Diff line number Diff line change
Expand Up @@ -1021,7 +1021,7 @@ static bool Evaluation_evaluate_one_operation(
}
case OPERATION_KIND_NOP: break;
case OPERATION_KIND_PUSH_OBJECT_ADDRESS: {
OK_OR_ERR(self->object_address, RZ_LOG_ERROR("object address not set"));
OK_OR_ERR(self->object_address, RZ_LOG_ERROR("object address not set\n"));
RzBinDwarfValue v = {
.type = RzBinDwarfValueType_GENERIC,
.generic = *self->object_address,
Expand Down Expand Up @@ -1356,7 +1356,7 @@ RZ_API RZ_BORROW RzVector /*<RzBinDwarfPiece>*/ *rz_bin_dwarf_evaluation_result(
if (self->state.kind == EVALUATION_STATE_COMPLETE) {
return &self->result;
}
RZ_LOG_ERROR("Called `Evaluation::result` on an `Evaluation` that has not been completed");
RZ_LOG_ERROR("Called `Evaluation::result` on an `Evaluation` that has not been completed\n");
return NULL;
}

Expand Down
2 changes: 1 addition & 1 deletion librz/bin/dwarf/unit.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ static bool CU_attrs_parse(
.encoding = &cu->hdr.encoding,
};
if (!RzBinDwarfAttr_parse(ctx->info->R, &attr, &opt)) {
RZ_LOG_ERROR("DWARF: failed attr: 0x%" PFMT64x " %s [%s]\n ",
RZ_LOG_ERROR("DWARF: failed attr: 0x%" PFMT64x " %s [%s]\n",
die->offset, rz_bin_dwarf_attr(spec->at), rz_bin_dwarf_form(spec->form));
continue;
}
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/dwarf/value.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ RZ_IPI bool ValueType_from_encoding(DW_ATE encoding, ut64 byte_size, RzBinDwarfV
case DW_ATE_lo_user:
case DW_ATE_hi_user:
default:
RZ_LOG_VERBOSE("Unsupported encoding: %d", encoding);
RZ_LOG_VERBOSE("Unsupported encoding: %d\n", encoding);
return false;
}
if (value_type == -1) {
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/format/elf/elf_strtab.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ RZ_OWN RzBinElfStrtab *Elf_(rz_bin_elf_strtab_new)(RZ_NONNULL ELFOBJ *bin, ut64
}

if (result->data[0] != '\0' || result->data[size - 1] != '\0') {
RZ_LOG_WARN("String table at 0x%" PFMT64x " should start and end by a NULL byte", offset);
RZ_LOG_WARN("String table at 0x%" PFMT64x " should start and end by a NULL byte\n", offset);
Elf_(rz_bin_elf_strtab_free)(result);
return NULL;
}
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/format/mach0/mach0.c
Original file line number Diff line number Diff line change
Expand Up @@ -2751,7 +2751,7 @@ size_t MACH0_(imports_count)(struct MACH0_(obj_t) * bin) {
return MACH0_(chained_imports_count)(bin);
} else {
if (bin->dysymtab.nundefsym > bin->nsymtab) {
RZ_LOG_ERROR("Invalid nundefsym value in LC_DYSYMTAB");
RZ_LOG_ERROR("Invalid nundefsym value in LC_DYSYMTAB\n");
return 0;
}
return bin->dysymtab.nundefsym;
Expand Down
4 changes: 2 additions & 2 deletions librz/bin/format/mach0/mach0_chained_fixups.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,11 @@ static void reconstruct_threaded_bind(ut64 paddr, ut64 vaddr, st64 addend, ut8 r
ReconstructThreadedCtx *ctx = user;
struct mach0_chained_fixups_t *cf = &ctx->bin->chained_fixups;
if (cf->imports_format != DYLD_CHAINED_IMPORT_THREADED) {
RZ_LOG_ERROR("Missing BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB before bind");
RZ_LOG_ERROR("Missing BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB before bind\n");
return;
}
if (sym_ord >= rz_vector_len(&cf->imports)) {
RZ_LOG_ERROR("Imports overflow BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB value");
RZ_LOG_ERROR("Imports overflow BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB value\n");
return;
}
RzDyldChainedImportThreaded *imp = rz_vector_index_ptr(&cf->imports, sym_ord);
Expand Down
1 change: 0 additions & 1 deletion librz/bin/format/mz/mz.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,6 @@ static int rz_bin_mz_init_hdr(struct rz_bin_mz_obj_t *bin) {
int relocations_size, dos_file_size;
MZ_image_dos_header *mz;
if (!(mz = RZ_NEW0(MZ_image_dos_header))) {
RZ_LOG_ERROR("Cannot allocate MZ_image_dos_header");
return false;
}
if (!read_mz_header(mz, bin->b)) {
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/format/objc/mach0_classes.c
Original file line number Diff line number Diff line change
Expand Up @@ -1178,7 +1178,7 @@ RZ_API void MACH0_(get_class_t)(mach0_ut p, RzBinFile *bf, RzBuffer *buf, RzBinC

#if SWIFT_SUPPORT
if (q(c.data + n_value) & 7) {
RZ_LOG_INFO("This is a Swift class");
RZ_LOG_INFO("This is a Swift class\n");
}
#endif
if (!is_meta_class && !dupe) {
Expand Down
2 changes: 1 addition & 1 deletion librz/bin/format/pe/dotnet.c
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ static int read_image_metadata_tilde_header(RzBuffer *b, ut64 addr, Pe_image_clr

#define TRY_SEEK(rowsize, rowcountname) \
if (rz_buf_seek(b, (rowsize) * (st64)rowcounts->rowcountname, RZ_BUF_CUR) < 0) { \
RZ_LOG_WARN("seeking #rowcountname (size %d)", rowsize); \
RZ_LOG_WARN("seeking #rowcountname (size %d)\n", rowsize); \
goto error; \
}

Expand Down
2 changes: 1 addition & 1 deletion librz/bin/format/pe/pe_security.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ int PE_(bin_pe_init_security)(RzBinPEObj *bin) {
}
cert->dwLength += (8 - (cert->dwLength & 7)) & 7; // align32
if (offset + cert->dwLength > paddr + size) {
RZ_LOG_INFO("Invalid certificate entry");
RZ_LOG_INFO("Invalid certificate entry\n");
RZ_FREE(cert);
return false;
}
Expand Down
8 changes: 4 additions & 4 deletions librz/bin/format/pyc/marshal.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ static pyc_object *get_stringref_object(RzBinPycObj *pyc, RzBuffer *buffer) {

n = get_st32(buffer, &error);
if (n >= rz_list_length(pyc->interned_table)) {
RZ_LOG_ERROR("bad marshal data (string ref out of range)");
RZ_LOG_ERROR("bad marshal data (string ref out of range)\n");
return NULL;
}
if (error) {
Expand Down Expand Up @@ -405,7 +405,7 @@ static pyc_object *get_string_object(RzBuffer *buffer) {

n = get_ut32(buffer, &error);
if (n > ST32_MAX) {
RZ_LOG_ERROR("bad marshal data (string size out of range)");
RZ_LOG_ERROR("bad marshal data (string size out of range)\n");
return NULL;
}
if (error) {
Expand Down Expand Up @@ -452,7 +452,7 @@ static pyc_object *get_unicode_object(RzBinPycObj *pyc, RzBuffer *buffer) {

n = get_ut32(buffer, &error);
if (n > ST32_MAX) {
RZ_LOG_ERROR("bad marshal data (unicode size out of range)");
RZ_LOG_ERROR("bad marshal data (unicode size out of range)\n");
return NULL;
}
if (error) {
Expand Down Expand Up @@ -481,7 +481,7 @@ static pyc_object *get_interned_object(RzBinPycObj *pyc, RzBuffer *buffer) {

n = get_ut32(buffer, &error);
if (n > ST32_MAX) {
RZ_LOG_ERROR("bad marshal data (string size out of range)");
RZ_LOG_ERROR("bad marshal data (string size out of range)\n");
return NULL;
}
if (error) {
Expand Down
12 changes: 6 additions & 6 deletions librz/bin/format/xnu/rz_cf_dict.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ RZ_API RzCFValueDict *rz_cf_value_dict_parse(RzBuffer *file_buf, ut64 offset, ut

if (next_state->phase == RZ_CF_STATE_IN_DICT && state->phase == RZ_CF_STATE_IN_KEY) {
if (!content) {
RZ_LOG_ERROR("NULL key is not supported");
RZ_LOG_ERROR("NULL key is not supported\n");
goto beach;
}
next_state->key = content;
Expand All @@ -219,25 +219,25 @@ RZ_API RzCFValueDict *rz_cf_value_dict_parse(RzBuffer *file_buf, ut64 offset, ut
if (idlist && state->idstate == RZ_CF_ID_STATE_REF) {
value = rz_list_get_n(idlist, (int)state->id);
if (!value) {
RZ_LOG_ERROR("Missing value for IDREF %" PFMT32u, state->id);
RZ_LOG_ERROR("Missing value for IDREF %" PFMT32u "\n", state->id);
goto beach;
}
if (state->phase == RZ_CF_STATE_IN_DICT) {
if (rz_list_length(state->dict->pairs) != 0) {
RZ_LOG_ERROR("Dict with IDREF already has elements");
RZ_LOG_ERROR("Dict with IDREF already has elements\n");
goto beach;
}
rz_cf_value_dict_free(state->dict);
state->dict = NULL;
} else if (state->phase == RZ_CF_STATE_IN_ARRAY) {
if (rz_list_length(state->dict->pairs) != 0) {
RZ_LOG_ERROR("Array with IDREF already has elements");
RZ_LOG_ERROR("Array with IDREF already has elements\n");
goto beach;
}
rz_cf_value_array_free(state->array);
state->array = NULL;
} else if (state->phase == RZ_CF_STATE_IN_SCALAR && content) {
RZ_LOG_ERROR("Element with IDREF already has content");
RZ_LOG_ERROR("Element with IDREF already has content\n");
goto beach;
}
value = rz_cf_value_clone(value);
Expand Down Expand Up @@ -287,7 +287,7 @@ RZ_API RzCFValueDict *rz_cf_value_dict_parse(RzBuffer *file_buf, ut64 offset, ut
if (value) {
rz_list_insert(idlist, state->id, value);
} else {
RZ_LOG_WARN("Missing value for ID %" PFMT32u, state->id);
RZ_LOG_WARN("Missing value for ID %" PFMT32u "\n", state->id);
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions librz/bin/p/bin_elf.inc
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ static ut32 hexagon_get_bitmask_r6(ut32 insn) {
return hex_rel6_x_masks[i].relocMask;
}
}
RZ_LOG_ERROR("Unrecognized instruction for 6_X relocation: 0x%x", insn);
RZ_LOG_ERROR("Unrecognized instruction for 6_X relocation: 0x%x\n", insn);
return 0;
}

Expand Down Expand Up @@ -133,7 +133,7 @@ static ut32 hexagon_get_bitmask_r16(ut32 insn) {
}
}

RZ_LOG_ERROR("Unrecognized instruction for 16_X relocation: 0x%x", insn);
RZ_LOG_ERROR("Unrecognized instruction for 16_X relocation: 0x%x\n", insn);
return 0;
}

Expand Down Expand Up @@ -830,7 +830,7 @@ static void patch_reloc_hexagon(RZ_INOUT RzBuffer *buf_patched, const ut64 patch

switch (rel_type) {
default:
RZ_LOG_WARN("Patching for reloc type %d not implemented.", rel_type);
RZ_LOG_WARN("Patching for reloc type %d not implemented.\n", rel_type);
rz_warn_if_reached();
// For more implementetations check out the LLVM src:
// https://github.com/llvm/llvm-project/blob/abc17a67519747be36f1fd03e227c5103da4c677/lld/ELF/Arch/Hexagon.cpp
Expand Down
2 changes: 1 addition & 1 deletion librz/core/agraph.c
Original file line number Diff line number Diff line change
Expand Up @@ -4361,7 +4361,7 @@ RZ_IPI int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalysisFunction *_
}
RzGraph *graph = rz_core_graph(core, RZ_CORE_GRAPH_TYPE_FUNCALL, function->addr);
if (!graph) {
RZ_LOG_INFO("failed to compute callgraph");
RZ_LOG_INFO("failed to compute callgraph\n");
break;
}
rz_core_agraph_reset(core);
Expand Down
2 changes: 1 addition & 1 deletion librz/core/analysis_objc.c
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ RZ_API void rz_core_analysis_objc_stubs(RzCore *core) {
goto found;
}
}
RZ_LOG_ERROR("__objc_stubs section not found for analysis");
RZ_LOG_ERROR("__objc_stubs section not found for analysis\n");
return;
found:
analyze_objc_stubs(core, stubs_section->vaddr, stubs_section->vsize);
Expand Down
2 changes: 1 addition & 1 deletion librz/core/cconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -2185,7 +2185,7 @@ static bool cb_pager(void *user, void *data) {
RzCore *core = (RzCore *)user;
RzConfigNode *node = (RzConfigNode *)data;
if (!strcmp(node->value, "?")) {
RZ_LOG_ERROR("usage: scr.pager must be '..' for internal less, or the path to a program in $PATH");
RZ_LOG_ERROR("usage: scr.pager must be '..' for internal less, or the path to a program in $PATH\n");
return false;
}
/* Let cons know we have a new pager. */
Expand Down
4 changes: 2 additions & 2 deletions librz/core/cfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ RZ_API bool rz_core_file_reopen(RzCore *core, const char *args, int perm, int lo
}
}
if (!ofilepath) {
RZ_LOG_ERROR("Unknown file path");
RZ_LOG_ERROR("Unknown file path\n");
free(obinfilepath);
return false;
}
Expand Down Expand Up @@ -446,7 +446,7 @@ RZ_API bool rz_core_file_reopen(RzCore *core, const char *args, int perm, int lo
ret = rz_core_bin_load(core, obinfilepath, baddr);
rz_core_bin_update_arch_bits(core);
if (!ret) {
RZ_LOG_ERROR("Error: Failed to reload rbin for: '%s'", path);
RZ_LOG_ERROR("Error: Failed to reload rbin for: '%s'\n", path);
}
origoff = rz_num_math(core->num, "entry0");
}
Expand Down
6 changes: 3 additions & 3 deletions librz/core/cil.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ RZ_IPI bool rz_core_analysis_il_vm_set(RzCore *core, const char *var_name, ut64
case RZ_IL_TYPE_PURE_FLOAT:
// TODO : ut64 value is enough for user input ?
// TODO : type is different with given value ?
RZ_LOG_ERROR("RzIL: Set float var from user input not supported yet");
RZ_LOG_ERROR("RzIL: Set float var from user input not supported yet\n");
return false;
}
if (val) {
Expand Down Expand Up @@ -764,8 +764,8 @@ RZ_IPI bool rz_core_analysis_il_step_with_events(RzCore *core, PJ *pj) {
bool evt_write = rz_config_get_b(core->config, "rzil.step.events.write");

if (!evt_read && !evt_write) {
RZ_LOG_ERROR("RzIL: cannot print events when all the events are disabled.");
RZ_LOG_ERROR("RzIL: please set 'rzil.step.events.read' or/and 'rzil.step.events.write' to true and try again.");
RZ_LOG_ERROR("RzIL: cannot print events when all the events are disabled.\n");
RZ_LOG_ERROR("RzIL: please set 'rzil.step.events.read' or/and 'rzil.step.events.write' to true and try again.\n");
return false;
}

Expand Down
Loading

0 comments on commit 2cacf88

Please sign in to comment.