Add pluggable resource writing to MuJoCo
Extend mjpResourceProvider with an optional write callback (write) so that mj_encode, mj_saveXML, and mj_saveModel can write to any registered provider. PiperOrigin-RevId: 945202741 Change-Id: I37903425260932e555f4a8c2392c4ff8c2e6cc06
This commit is contained in:
committed by
Copybara-Service
parent
bdeb7e7c4d
commit
dc7581acfa
+5
-16
@@ -261,29 +261,18 @@ mjtSize mj_encode(const mjSpec* s, const mjModel* m, const char* filename,
|
||||
return -1;
|
||||
}
|
||||
|
||||
FILE* fp = fopen(filename, "wb");
|
||||
if (!fp) {
|
||||
std::free(resource.data);
|
||||
if (error) {
|
||||
strncpy(error, "could not open file for writing", error_sz);
|
||||
error[error_sz - 1] = '\0';
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
const std::size_t written = fwrite(resource.data, 1, nbytes, fp);
|
||||
fclose(fp);
|
||||
mjtSize written = mju_writeResource(filename, resource.data, nbytes, vfs, error, error_sz);
|
||||
encoder->close_resource(&resource);
|
||||
|
||||
if (static_cast<mjtSize>(written) != nbytes) {
|
||||
if (error) {
|
||||
strncpy(error, "failed to write all bytes to file", error_sz);
|
||||
if (written != nbytes) {
|
||||
if (error && error[0] == '\0') {
|
||||
strncpy(error, "write failed", error_sz);
|
||||
error[error_sz - 1] = '\0';
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
return nbytes;
|
||||
return written;
|
||||
}
|
||||
|
||||
// helper function to log compile time diagnostics
|
||||
|
||||
Reference in New Issue
Block a user