MCPcopy Create free account
hub / github.com/F-Stack/f-stack / csv_emit_record

Function csv_emit_record

tools/libxo/encoder/csv/enc_csv.c:336–413  ·  view source on GitHub ↗

* Create a 'record' of 'fields' from our recorded leaf values. If * this is the first line and "no-header" isn't given, make a record * containing the leaf names. */

Source from the content-addressed store, hash-verified

334 * containing the leaf names.
335 */
336static void
337csv_emit_record (xo_handle_t *xop, csv_private_t *csv)
338{
339 csv_dbg(xop, csv, "csv: emit: ...\n");
340
341 ssize_t fnum;
342 uint32_t quote_flags;
343 leaf_t *lp;
344
345 /* If we have no data, then don't bother */
346 if (csv->c_leaf_depth == 0)
347 return;
348
349 if (!(csv->c_flags & (CF_HEADER_DONE | CF_NO_HEADER))) {
350 csv->c_flags |= CF_HEADER_DONE;
351
352 for (fnum = 0; fnum < csv->c_leaf_depth; fnum++) {
353 lp = &csv->c_leaf[fnum];
354 const char *name = xo_buf_data(&csv->c_name_buf, lp->f_name);
355
356 if (fnum != 0)
357 xo_buf_append(&csv->c_data, ",", 1);
358
359 xo_buf_append(&csv->c_data, name, strlen(name));
360 }
361
362 csv_append_newline(&csv->c_data, csv);
363 }
364
365 for (fnum = 0; fnum < csv->c_leaf_depth; fnum++) {
366 lp = &csv->c_leaf[fnum];
367 const char *value;
368
369 if (lp->f_flags & LF_HAS_VALUE) {
370 value = xo_buf_data(&csv->c_value_buf, lp->f_value);
371 } else {
372 value = "";
373 }
374
375 quote_flags = csv_quote_flags(xop, csv, value);
376
377 if (fnum != 0)
378 xo_buf_append(&csv->c_data, ",", 1);
379
380 if (quote_flags & QF_NEEDS_QUOTES)
381 xo_buf_append(&csv->c_data, "\"", 1);
382
383 if (quote_flags & QF_NEEDS_ESCAPE)
384 csv_escape(&csv->c_data, value, strlen(value));
385 else
386 xo_buf_append(&csv->c_data, value, strlen(value));
387
388 if (quote_flags & QF_NEEDS_QUOTES)
389 xo_buf_append(&csv->c_data, "\"", 1);
390 }
391
392 csv_append_newline(&csv->c_data, csv);
393

Callers 2

csv_open_levelFunction · 0.85
csv_close_levelFunction · 0.85

Calls 9

csv_dbgFunction · 0.85
xo_buf_dataFunction · 0.85
xo_buf_appendFunction · 0.85
csv_append_newlineFunction · 0.85
csv_quote_flagsFunction · 0.85
csv_escapeFunction · 0.85
xo_get_flagsFunction · 0.85
xo_flush_hFunction · 0.85
xo_buf_resetFunction · 0.85

Tested by

no test coverage detected