[Csnd] CsOptions using --env with a value containing spaces
| Date | 2024-06-14 20:02 |
| From | "Jeanette C." |
| Subject | [Csnd] CsOptions using --env with a value containing spaces |
Hey hey,
is there a way to set an environment variable to a path which contains spaces.
Simple example:
directory: "my folder"
--env:INCDIR="my folder"
I have tried the above, the same with single quotes and the same with a
backslash '\' to escape the space without any quotes. The use-case is, of
course, for a directory over which I don't have any control, part of a basic
system path.
Any help is appreciated!
Best wishes,
Jeanette
--
* Website: http://juliencoder.de - for summer is a state of sound
* Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
* Audiobombs: https://www.audiobombs.com/users/jeanette_c
* GitHub: https://github.com/jeanette-c
You should never try to change me
I can be nobody else
And I like the way I am <3
(Britney Spears)
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-20 15:34 |
| From | Richard Knight |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Hi
I have just tried doing this on Windows and Linux and both seem to work
(Csound 6.16 and 6.19) with a quoted path containing spaces - seemed to
work with absolute and relative paths as well. Also seems to work with
the --omacro flag as well which has similar syntax to --env.
Which OS are you using? Only thought would be if you are on windows and
have backslash path separator, that might need to be changed to forward
slash (or escaped)..
all the best
Richard
On 2024-06-14 20:02, Jeanette C. wrote:
> Hey hey,
> is there a way to set an environment variable to a path which contains
> spaces. Simple example:
> directory: "my folder"
> --env:INCDIR="my folder"
> I have tried the above, the same with single quotes and the same with
> a backslash '\' to escape the space without any quotes. The use-case
> is, of course, for a directory over which I don't have any control,
> part of a basic system path.
>
> Any help is appreciated!
>
> Best wishes,
>
> Jeanette
>
> --
> * Website: http://juliencoder.de - for summer is a state of sound
> * Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
> * Audiobombs: https://www.audiobombs.com/users/jeanette_c
> * GitHub: https://github.com/jeanette-c
>
> You should never try to change me
> I can be nobody else
> And I like the way I am <3
> (Britney Spears)
>
> Csound mailing list
> Csound@listserv.heanet.ie
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
> https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-20 22:25 |
| From | "Jeanette C." |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Hi Richard,
thanks for your reply and testing on both operating systems. I am on Linux and
run Csound 6.18 . So did you try something like:
--env:INCDIR="/path to/include dir"
I mean the basic format, not the relative or absolute bits. I tried different
versions and none of it worked. I couldn't include the file in that directory.
How about a slash at the end, the style of quotation mark, etc.?
Best wishes and many thanks,
Jeanette
Jun 20 2024, Richard Knight has written:
> Hi
> I have just tried doing this on Windows and Linux and both seem to work
> (Csound 6.16 and 6.19) with a quoted path containing spaces - seemed to work
> with absolute and relative paths as well. Also seems to work with the
> --omacro flag as well which has similar syntax to --env.
> Which OS are you using? Only thought would be if you are on windows and have
> backslash path separator, that might need to be changed to forward slash (or
> escaped)..
>
> all the best
> Richard
>
> On 2024-06-14 20:02, Jeanette C. wrote:
>> Hey hey,
>> is there a way to set an environment variable to a path which contains
>> spaces. Simple example:
>> directory: "my folder"
>> --env:INCDIR="my folder"
>> I have tried the above, the same with single quotes and the same with
>> a backslash '\' to escape the space without any quotes. The use-case
>> is, of course, for a directory over which I don't have any control,
>> part of a basic system path.
>>
>> Any help is appreciated!
>>
>> Best wishes,
>>
>> Jeanette
>>
>> --
>> * Website: http://juliencoder.de - for summer is a state of sound
>> * Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
>> * Audiobombs: https://www.audiobombs.com/users/jeanette_c
>> * GitHub: https://github.com/jeanette-c
>>
>> You should never try to change me
>> I can be nobody else
>> And I like the way I am <3
>> (Britney Spears)
>>
>> Csound mailing list
>> Csound@listserv.heanet.ie
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>> https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
> Csound mailing list
> Csound@listserv.heanet.ie
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
> https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
>
--
* Website: http://juliencoder.de - for summer is a state of sound
* Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
* Audiobombs: https://www.audiobombs.com/users/jeanette_c
* GitHub: https://github.com/jeanette-c
All you people look at me like I'm a little girl.
Well did you ever think it be okay for me to step into this world. <3
(Britney Spears)
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-21 01:08 |
| From | Richard Knight |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Hi
That's strange - yes, I tried something like that - I created a file
include.inc in /tmp/csound test/include dir , with just a prints
statement. Then I created a csd in /tmp which had the line
#include "include.inc"
... and ran while in /tmp by typing
csound --env:INCDIR="/tmp/csound test/include dir" run.csd
which worked and the prints statement - also the following worked, ie
the relative path
csound --env:INCDIR="csound test/include dir" run.csd
if you run csound with -v then it might give some indication of what is
going on/going wrong - if I run
csound -v --env:INCDIR="/tmp/csound test/include dir" run.csd
then somewhere in the output are these:
decode_long env:INCDIR=csound test/include dirs
Environment variable 'INCDIR' has been set to 'csound test/include
dirs'
and also it will show the search path when it gets to parsing the
#include:
Creating search path cache for 'INCDIR':
1: "csound test/include dir/"
Hopefully with -v somewhere in the output, there should be some hints of
what's happening wrong!
all the best,
Richard
On 2024-06-20 22:25, Jeanette C. wrote:
> Hi Richard,
> thanks for your reply and testing on both operating systems. I am on
> Linux and run Csound 6.18 . So did you try something like:
> --env:INCDIR="/path to/include dir"
> I mean the basic format, not the relative or absolute bits. I tried
> different versions and none of it worked. I couldn't include the file
> in that directory. How about a slash at the end, the style of
> quotation mark, etc.?
>
> Best wishes and many thanks,
>
> Jeanette
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-21 13:18 |
| From | "Jeanette C." |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
| Attachments | csd_include_exaple.zip |
Hi Richard,
I have attached an example. The zipfile will unpack into a main example folder
that has a subfolder. There are two .csd files, that have the env option in
their CsOptions block. When you comment these out and use
csound --env:INCDIR="include folder" inc_file.csd
it works. When you use the env option from the CSD file, it does not work.
Inspecting the output of csound with -v it shows that the include folder is
set to:
'^Cinclude folder'
So somehow the Csound parser introduced a control-C character there.
Do you get the same result?
Best wishes,
Jeanette
--
* Website: http://juliencoder.de - for summer is a state of sound
* Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
* Audiobombs: https://www.audiobombs.com/users/jeanette_c
* GitHub: https://github.com/jeanette-c
Say hello to the girl that I am! <3
(Britney Spears)
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-21 14:55 |
| From | Richard Knight |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Ah right, I see - when I use --env on the command line with these, they
work - but I missed that you are trying to use these in CsOptions - and
yes I get the same result with that approach in that it doesn't work.
I'm not seeing the prepended ^C though.
I think it may be a bug in the CsOptions parser, from what I can see
that's in Top/one_file.c in the source, from line 232. At a glance it
looks like it is supposed to handle spaces in quotes, but I may have a
play around later and see if I can figure out what's happening.
On 2024-06-21 13:18, Jeanette C. wrote:
> Hi Richard,
> I have attached an example. The zipfile will unpack into a main
> example folder that has a subfolder. There are two .csd files, that
> have the env option in their CsOptions block. When you comment these
> out and use
> csound --env:INCDIR="include folder" inc_file.csd
> it works. When you use the env option from the CSD file, it does not
> work. Inspecting the output of csound with -v it shows that the
> include folder is set to:
> '^Cinclude folder'
> So somehow the Csound parser introduced a control-C character there.
>
> Do you get the same result?
>
> Best wishes,
>
> Jeanette
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-21 16:01 |
| From | Richard Knight |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Actually does it work with INCDIR specified in CsOptions even without
spaces?
Fiddled about with the source a bit, looked like both command line and
CsOptions --env flags are being parsed the same - then realised it
doesn't even work for me with any INCDIR specified in CsOptions, so
--env may be one of the flags that can only be passed as a command line
flag (there are a few mentioned in the manual, but not env...)
On 2024-06-21 14:55, Richard Knight wrote:
> Ah right, I see - when I use --env on the command line with these,
> they work - but I missed that you are trying to use these in CsOptions
> - and yes I get the same result with that approach in that it doesn't
> work.
> I'm not seeing the prepended ^C though.
> I think it may be a bug in the CsOptions parser, from what I can see
> that's in Top/one_file.c in the source, from line 232. At a glance it
> looks like it is supposed to handle spaces in quotes, but I may have a
> play around later and see if I can figure out what's happening.
>
> On 2024-06-21 13:18, Jeanette C. wrote:
>> Hi Richard,
>> I have attached an example. The zipfile will unpack into a main
>> example folder that has a subfolder. There are two .csd files, that
>> have the env option in their CsOptions block. When you comment these
>> out and use
>> csound --env:INCDIR="include folder" inc_file.csd
>> it works. When you use the env option from the CSD file, it does not
>> work. Inspecting the output of csound with -v it shows that the
>> include folder is set to:
>> '^Cinclude folder'
>> So somehow the Csound parser introduced a control-C character there.
>>
>> Do you get the same result?
>>
>> Best wishes,
>>
>> Jeanette
>
> Csound mailing list
> Csound@listserv.heanet.ie
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
> https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-21 17:21 |
| From | "Jeanette C." |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Hi Richard,
include paths without space work, perahsp there is no quotation required? Yes,
it is the quotation. I just tried putting double quotes around the include
directory to set and it promptly failed. This is reproduceable. It seems to be
the parsing of quoted strings in the CsdOptions block, especially the
beginning of them.
When you look at the .log files that were part of the zip, can you see that a
control-C character had been inserted, or does your editor not show that? It
being control characters, different terminals/viewers deal with it
differently. I opened it in vim on a Linux TTY. It's a headless system.
Best wishes and thanks for all your efforts!
Jeanette
--
* Website: http://juliencoder.de - for summer is a state of sound
* Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
* Audiobombs: https://www.audiobombs.com/users/jeanette_c
* GitHub: https://github.com/jeanette-c
There must be another way
Cause I believe in taking chances
But who am I to say - What a girl is to do <3
(Britney Spears)
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-21 21:47 |
| From | Richard Knight |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Hmm ok seem to be honing in a bit - I agree, in CsOptions anything
quoted for --env:INCDIR seems to fail even if it has no spaces.
Yes - it looks like a control-C has been inserted and I missed that
before in my output.
It definitely does look to be happening in the Top/one_file.c file - it
deals with the closing " OK, but the opening " it replaces with ctrl-C
(ascii code 3) on the lines commented with
/* ETX char used to mark the limits of a string */
-not figured out how to best fix it yet - may be worth filing a bug
report on github!
On 2024-06-21 17:21, Jeanette C. wrote:
> Hi Richard,
> include paths without space work, perahsp there is no quotation
> required? Yes, it is the quotation. I just tried putting double quotes
> around the include directory to set and it promptly failed. This is
> reproduceable. It seems to be the parsing of quoted strings in the
> CsdOptions block, especially the beginning of them.
>
> When you look at the .log files that were part of the zip, can you see
> that a control-C character had been inserted, or does your editor not
> show that? It being control characters, different terminals/viewers
> deal with it differently. I opened it in vim on a Linux TTY. It's a
> headless system.
>
> Best wishes and thanks for all your efforts!
>
> Jeanette
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-22 07:01 |
| From | Scott Sitar |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Greetings, and sorry to interrupt mid conversation! I think I might have a line on what's going on here. (For reference, I'm on MacOS, but I don't think this bug is platform-specific) This is also happening in cs7, and I think I've got the start of a patch that fixes it. There seem to be two separate issues here (references to the cs7 code): 1) In Top/one_file.c, readOptions() (https://github.com/csound/csound/blob/develop/Top/one_file.c#L337), we are replacing the opening quotation mark with an ETX, but if the character following the closing quotation mark is whitespace (it will be a newline in the examples given), we replace the closing quotation mark with a NULL rather than an ETX. So, we probably always want to replace the closing quotation mark with an ETX, and then optionally replace the following whitespace with a NULL. 2) In Engine/envvar.c, csoundParseEnv() (https://github.com/csound/csound/blob/develop/Engine/envvar.c#L376), we determine where the value should start, but we don't take into account that it might be an ETX-delimited string and adjust our bounds accordingly. Putting together the following super rough patch below seems to fix the problem. This kind of string manipulation has many pitfalls, so I haven't blunder-checked myself too carefully yet. If this kind of approach seems okay with everyone, I can get a PR up this weekend. It also shouldn't be too bad to get a test case for this under tests/c, so I could put that in the PR as well. --------------- diff --git a/Engine/envvar.c b/Engine/envvar.c index 96e0f6de3..7a3f4afdf 100644 --- a/Engine/envvar.c +++ b/Engine/envvar.c @@ -349,7 +349,7 @@ int csoundInitEnv(CSOUND *csound) int csoundParseEnv(CSOUND *csound, const char *s) { - char *name, *value, msg[256]; + char *name, *value, *end_str, msg[256]; int append_mode, retval; /* copy string constant */ @@ -373,6 +373,17 @@ int csoundParseEnv(CSOUND *csound, const char *s) retval = CSOUND_ERROR; goto err_return; } + /* check if we have a quoted string bounded by ETX characters */ + if (*value == 3) { + end_str = strchr(value + 1, '\03'); + if (UNLIKELY(end_str == NULL)) { + retval = CSOUND_ERROR; + goto err_return; + } else { + *end_str = '\0'; + value++; + } + } /* set variable */ if (!append_mode) retval = csoundSetEnv(csound, name, value); diff --git a/Top/one_file.c b/Top/one_file.c index 5a82bbb4c..645e1ebf5 100644 --- a/Top/one_file.c +++ b/Top/one_file.c @@ -334,13 +334,11 @@ int readOptions(CSOUND *csound, CORFIL *cf, int readingCsOptions) p++; } if (*p == '"') { + *p = 3; if (isspace(*(p+1))) { - *p = '\0'; + *(p+1) = '\0'; break; } - else { - *p = 3; - } } } p++; On Fri, Jun 21, 2024 at 1:47 PM Richard Knight <richard@1bpm.net> wrote: Hmm ok seem to be honing in a bit - I agree, in CsOptions anything |
| Date | 2024-06-22 13:14 |
| From | "Jeanette C." |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Hi Richard and Scott,
thanks again for your research and the potential patch. I would have been lost
with these details. -- I'm looking forward to a fix upstream.
Best wishes,
Jeanette
--
* Website: http://juliencoder.de - for summer is a state of sound
* Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
* Audiobombs: https://www.audiobombs.com/users/jeanette_c
* GitHub: https://github.com/jeanette-c
I used to think
I had the answers to everything
But now I know
... :) <3
(Britney Spears)
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2024-06-22 15:52 |
| From | Richard Knight |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
|
Ah great! On 2024-06-22 07:01, Scott Sitar wrote:
|
| Date | 2024-06-23 04:35 |
| From | Scott Sitar |
| Subject | Re: [Csnd] CsOptions using --env with a value containing spaces |
Awesome, thanks for testing! I'm glad it worked. I've opened a PR for it now, but after some thought, I took a slightly different approach. I wasn't entirely satisfied with knowledge of our special control character mechanisms leaking out into a general purpose argument decoder/environment variable handler. I've also left some notes on a few other issues I found while looking at this in the PR comments, and I'm happy to help out by making it a little more robust with some more future changes. Scott On Sat, Jun 22, 2024 at 7:52 AM Richard Knight <richard@1bpm.net> wrote:
|