Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Loading from file in current (sim) directory fails #12

Open
rhinton opened this issue Nov 27, 2021 · 2 comments
Open

Loading from file in current (sim) directory fails #12

rhinton opened this issue Nov 27, 2021 · 2 comments

Comments

@rhinton
Copy link

rhinton commented Nov 27, 2021

My build system is setup to copy files to the simulation directory, so I can load them without any relative or absolute path specification. Doing so causes problems with the jsonLoad function.

  1. jsonLoad calls decode on the input string, which causes a bunch of errors. The decode function looks for specific non-alphanumeric characters in the first or second position of the string in order to detect a file path vs. encoded string.
  2. jsonLoad checks for ".json" in the decoded string (raw) instead of the input string. Because all of the hex decode calls failed on my path, there isn't anything interesting in the decoded string. So jsonLoad tries to parse my file name as a JSON string.

One workaround in my code would be to specify a path ./my_file_name.json instead of just my_file_name.json. Another is to call jsonReadFile directly. I picked the latter.

Long-term, I suggest either splitting jsonLoad to be less of a "do what I mean" function, or making it smarter so it does what I mean in this case.

@Paebbels
Copy link
Owner

@umarcor can you help here?
I think you contributed this addition to the code, right?

@umarcor
Copy link

umarcor commented Dec 7, 2021

@rhinton's explanation is correct.

  • We require users to use ./ or / if they are providing a file.
  • Users can work around it by removing ./ and calling jsonParseStream(jsonReadFile(...)) directly.

I'd say that the issue is in decode. It is expected to either decode the string or return it as-is. In this case, we would like it to be returned as-is, but it is being processed by base16_decode.

I think we should do (https://github.com/Paebbels/JSON-for-VHDL/blob/master/src/JSON.pkg.vhdl#L282-L290):

		case str(1) is
			when '{'|'['|'.'|'/'|'\' =>
			        -- It's a not encoded string (an object, a list, or a path on Linux)
				return str;
			when others =>
				if
				  -- Is it a Windows path?
				  (str(2) = ':')
				  or
				  -- Is it a filename?
				  ( ".json" = str(str'length-4 to str'length) )
				then
					return str;
				end if;
				return base16_decode(str);
		end case;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants