int ndmchan_n_avail_total (struct ndmchan *ch) { if (ch->end_ix == ch->beg_ix) ch->end_ix = ch->beg_ix = 0; if (ch->end_ix >= ch->data_size) { ndmchan_compress (ch); } return ch->data_size - ch->end_ix + ch->beg_ix; }
int ndmda_quantum_stderr (struct ndm_session *sess) { struct ndm_data_agent * da = sess->data_acb; struct ndmchan * ch = &da->formatter_error; int did_something = 0; char * p; char * data; char * pend; unsigned n_ready; again: n_ready = ndmchan_n_ready (ch); if (n_ready == 0) return did_something; data = p = &ch->data[ch->beg_ix]; pend = p + n_ready; while (p < pend && *p != '\n') p++; if (p < pend && *p == '\n') { *p++ = 0; ndma_send_logmsg (sess, NDMP9_LOG_NORMAL, sess->plumb.data, "%s", data); ch->beg_ix += p - data; did_something++; goto again; } if (!ch->eof) return did_something; /* content w/o newline, and EOF */ /* p == pend */ if (ch->end_ix >= ch->data_size) { if (data != ch->data) { ndmchan_compress (ch); goto again; } /* that's one huge message */ p--; /* lose last byte */ } ch->data[ch->end_ix++] = '\n'; did_something++; goto again; }
int ndmda_quantum_wrap (struct ndm_session *sess) { struct ndm_data_agent * da = sess->data_acb; struct ndmchan * ch = &da->formatter_wrap; int did_something = 0; char * p; char * data; char * pend; unsigned n_ready; int is_recover = 0; switch (da->data_state.operation) { default: assert (0); break; case NDMP9_DATA_OP_BACKUP: break; case NDMP9_DATA_OP_RECOVER: case NDMP9_DATA_OP_RECOVER_FILEHIST: is_recover = 1; break; } again: n_ready = ndmchan_n_ready (ch); if (n_ready == 0) { if (ch->eof && is_recover) { ndmda_data_halt (sess, NDMP9_DATA_HALT_SUCCESSFUL); } return did_something; } data = p = &ch->data[ch->beg_ix]; pend = p + n_ready; while (p < pend && *p != '\n') p++; if (p < pend && *p == '\n') { *p++ = 0; ndmda_wrap_in (sess, data); ch->beg_ix += p - data; did_something++; goto again; } if (!ch->eof) return did_something; /* content w/o newline, and EOF */ /* p == pend */ if (ch->end_ix >= ch->data_size) { if (data != ch->data) { ndmchan_compress (ch); goto again; } /* that's one huge message */ p--; /* lose last byte */ } ch->data[ch->end_ix++] = '\n'; did_something++; goto again; }