Skip to content

Commit

Permalink
Correctly handle filename containing spaces for external resources. F…
Browse files Browse the repository at this point in the history
…ixes #74.
  • Loading branch information
syoyo committed Jun 4, 2018
1 parent 5307850 commit 57f8e7c
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 4 deletions.
15 changes: 15 additions & 0 deletions experimental/README.md
Original file line number Diff line number Diff line change
@@ -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 changes: 34 additions & 0 deletions experimental/gen.py
Original file line number Diff line number Diff line change
@@ -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()
10 changes: 6 additions & 4 deletions tiny_gltf_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -902,15 +904,15 @@ 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;
}

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;
}
Expand Down

0 comments on commit 57f8e7c

Please sign in to comment.