int pbc_register(struct pbc_env * p, struct pbc_slice *slice) { //dump((uint8_t *)slice->buffer, slice->len); struct pbc_rmessage * message = pbc_rmessage_new(p, "google.protobuf.FileDescriptorSet", slice); if (message == NULL) { p->lasterror = "register open google.protobuf.FileDescriptorSet fail"; return 1; } int n = pbc_rmessage_size(message, "file"); struct pbc_rmessage ** files = (struct pbc_rmessage **)_pbcM_malloc(n*(sizeof(struct pbc_rmessage *))); int i; int r = n; if (n == 0) { p->lasterror = "register empty"; goto _error; } for (i=0;i<n;i++) { files[i] = pbc_rmessage_message(message, "file", i); if (files[i] == NULL) { p->lasterror = "register open fail"; goto _error; } } do { int rr = _register_no_dependency(p,files , n); if (rr == r) { p->lasterror = "register dependency error"; goto _error; } r = rr; } while (r>0); pbc_rmessage_delete(message); free(files); return 0; _error: pbc_rmessage_delete(message); free(files); return 1; }
int pbc_register(struct pbc_env * p, struct pbc_slice *slice) { struct pbc_rmessage * message = pbc_rmessage_new(p, "google.protobuf.FileDescriptorSet", slice); if (message == NULL) { p->lasterror = "register open google.protobuf.FileDescriptorSet fail"; return 1; } int n = pbc_rmessage_size(message, "file"); struct pbc_rmessage * files[n]; int i; if (n == 0) { p->lasterror = "register empty"; goto _error; } for (i=0;i<n;i++) { files[i] = pbc_rmessage_message(message, "file", i); if (files[i] == NULL) { p->lasterror = "register open fail"; goto _error; } } int r = n; do { int rr = _register_no_dependency(p,files , n); if (rr == r) { p->lasterror = "register dependency error"; goto _error; } r = rr; } while (r>0); pbc_rmessage_delete(message); return 0; _error: pbc_rmessage_delete(message); return 1; }