Convert mju_openResource to write warnings to a given error string.
PiperOrigin-RevId: 606907392 Change-Id: Ic70e980aa9ba2bdbe1787773f51749b34f74afed
This commit is contained in:
committed by
Copybara-Service
parent
f50a44e193
commit
266161ee4c
@@ -722,8 +722,10 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) {
|
||||
mjResource* r = NULL;
|
||||
|
||||
// first try vfs, otherwise try a provider or OS filesystem
|
||||
if ((r = mju_openVfsResource(filename, vfs)) == NULL) {
|
||||
if ((r = mju_openResource(filename)) == NULL) {
|
||||
if (!(r = mju_openVfsResource(filename, vfs))) {
|
||||
char error[1024];
|
||||
if (!(r = mju_openResource(filename, error, 1024))) {
|
||||
mju_warning("%s", error);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,12 @@ typedef struct {
|
||||
|
||||
// open the given resource; if the name doesn't have a prefix matching with a
|
||||
// resource provider, then the OS filesystem is used
|
||||
mjResource* mju_openResource(const char* name) {
|
||||
mjResource* mju_openResource(const char* name, char* error, size_t error_sz) {
|
||||
// no error so far
|
||||
if (error) {
|
||||
error[0] = '\0';
|
||||
}
|
||||
|
||||
mjResource* resource = (mjResource*) mju_malloc(sizeof(mjResource));
|
||||
const mjpResourceProvider* provider = NULL;
|
||||
if (resource == NULL) {
|
||||
@@ -72,9 +77,12 @@ mjResource* mju_openResource(const char* name) {
|
||||
return resource;
|
||||
}
|
||||
|
||||
mju_warning("mju_openResource: could not open resource '%s' "
|
||||
"using a resource provider matching prefix '%s'",
|
||||
name, provider->prefix);
|
||||
if (error) {
|
||||
snprintf(error, error_sz, "could not open '%s'"
|
||||
"using a resource provider matching prefix '%s'",
|
||||
name, provider->prefix);
|
||||
}
|
||||
|
||||
mju_closeResource(resource);
|
||||
return NULL;
|
||||
}
|
||||
@@ -85,7 +93,10 @@ mjResource* mju_openResource(const char* name) {
|
||||
file_buffer* fb = (file_buffer*) resource->data;
|
||||
fb->buffer = mju_fileToMemory(name, &(fb->nbuffer));
|
||||
if (fb->buffer == NULL) {
|
||||
mju_warning("mju_openResource: unknown file '%s'", name);
|
||||
if (error) {
|
||||
snprintf(error, error_sz,
|
||||
"resource not found via provider or OS filesystem: '%s'", name);
|
||||
}
|
||||
mju_closeResource(resource);
|
||||
return NULL;
|
||||
}
|
||||
@@ -95,7 +106,6 @@ mjResource* mju_openResource(const char* name) {
|
||||
} else {
|
||||
memset(&fb->mtime, 0, sizeof(time_t));
|
||||
}
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#include <mujoco/mjexport.h>
|
||||
#include "engine/engine_plugin.h"
|
||||
#include <mujoco/mujoco.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -26,7 +26,7 @@ extern "C" {
|
||||
|
||||
// open the given resource; if the name doesn't have a prefix matching with a
|
||||
// resource provider, then the OS filesystem is used
|
||||
MJAPI mjResource* mju_openResource(const char* name);
|
||||
MJAPI mjResource* mju_openResource(const char* name, char* error, size_t error_sz);
|
||||
|
||||
// close the given resource; no-op if resource is NULL
|
||||
MJAPI void mju_closeResource(mjResource* resource);
|
||||
|
||||
Reference in New Issue
Block a user