mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-04-18 12:09:53 +08:00
Correctly handle filename containing spaces for external resources. Fixes #74.
This commit is contained in:
parent
5307850555
commit
57f8e7ca3b
15
experimental/README.md
Normal file
15
experimental/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Python script which generates C++11 code from JSON schema.
|
||||
|
||||
## Requirements
|
||||
|
||||
* python3
|
||||
* jsonref
|
||||
|
||||
## Generate
|
||||
|
||||
Run `gen.py` by specifing the path to glTF schema directory(from https://github.com/KhronosGroup/glTF.git)
|
||||
|
||||
```
|
||||
$ python gen.py /path/to/glTF/specification/2.0/schema
|
||||
```
|
||||
|
34
experimental/gen.py
Normal file
34
experimental/gen.py
Normal file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys, os
|
||||
import subprocess
|
||||
import json
|
||||
from pprint import pprint
|
||||
import jsonref
|
||||
|
||||
# glTF 2.0
|
||||
schema_files = [
|
||||
"glTF.schema.json"
|
||||
]
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Requires path to glTF scheme directory.")
|
||||
sys.exit(-1)
|
||||
|
||||
gltf_schema_dir = sys.argv[1]
|
||||
|
||||
gltf_schema_filepath = os.path.join(gltf_schema_dir, schema_files[0])
|
||||
if not os.path.exists(gltf_schema_filepath):
|
||||
print("File not found: {}".format(gltf_schema_filepath))
|
||||
sys.exit(-1)
|
||||
|
||||
gltf_schema_uri = 'file://{}/'.format(gltf_schema_dir)
|
||||
with open(gltf_schema_filepath) as schema_file:
|
||||
j = jsonref.loads(schema_file.read(), base_uri=gltf_schema_uri, jsonschema=True)
|
||||
pprint(j)
|
||||
|
||||
|
||||
|
||||
main()
|
@ -733,15 +733,17 @@ static std::string ExpandFilePath(const std::string &filepath) {
|
||||
}
|
||||
|
||||
// char** w;
|
||||
int ret = wordexp(filepath.c_str(), &p, 0);
|
||||
// wrap filepath by quotes to avoid splitting file path when the path contains spaces(more precisely, $IFS environment variables).
|
||||
std::string quoted_filepath = "\"" + filepath + "\"";
|
||||
int ret = wordexp(quoted_filepath.c_str(), &p, 0);
|
||||
if (ret) {
|
||||
// err
|
||||
s = filepath;
|
||||
return s;
|
||||
}
|
||||
|
||||
// Use first element only.
|
||||
if (p.we_wordv) {
|
||||
// Use first item.
|
||||
s = std::string(p.we_wordv[0]);
|
||||
wordfree(&p);
|
||||
} else {
|
||||
@ -902,7 +904,7 @@ static bool LoadExternalFile(std::vector<unsigned char> *out, std::string *err,
|
||||
std::string filepath = FindFile(paths, filename);
|
||||
if (filepath.empty()) {
|
||||
if (err) {
|
||||
(*err) += "File not found : " + filename + "\n";
|
||||
(*err) += "File not found : \"" + filename + "\"\n";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -910,7 +912,7 @@ static bool LoadExternalFile(std::vector<unsigned char> *out, std::string *err,
|
||||
std::ifstream f(filepath.c_str(), std::ifstream::binary);
|
||||
if (!f) {
|
||||
if (err) {
|
||||
(*err) += "File open error : " + filepath + "\n";
|
||||
(*err) += "File open error : \"" + filepath + "\"\n";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user