DerelictVorbis and string pointer

ANtlord antlord92 at gmail.com
Sun Jun 24 01:26:48 UTC 2018


Hello D community!

I'm developing an application that must work on audio especially 
playback Ogg files. So I took library DerelictVorbis [0] testing 
basic functions like `ov_fopen`. The tests were successful so I 
decided to implement core components of the application using D 
and Derelict libraries.

Today I encountered a problem, the `ov_fopen` returns -1 instead 
of 0. It means that something goes wrong and the file that is 
pointed by a string is not opened. I figured out it so there is 
the error is not occurred when a file path is pointed by a string 
variable from CLI input arguments but it is occurred when the 
path is pointed by a string variable filled dynamically (for 
example file path is read from another file).

Here code goes

public import derelict.vorbis;
public import derelict.vorbis.file;

void main(string[] args) {
	DerelictVorbis.load();
	DerelictVorbisFile.load();
	OggVorbis_File _ovFile;

	immutable filepath = args[1];
	

	import std.file;
	import std.string;
	string filepath2 = "./name.txt".readText.strip;
	assert(filepath2 == filepath);
	int res = ov_fopen(filepath2.ptr, &_ovFile); // res == -1
	// int res = ov_fopen(filepath.ptr, &_ovFile); // res == 0
	assert(res == 0, "ov_fopen returns %d".format(res));
}

Actually I get it worked replacing `string filepath2` by `char[] 
filepath2` but filepath is string still and it works correctly.

So what detail The devil is in? Is there an issue in 
DerelictVorbis or in compiler. Don't I know something about 
implementation of strings or pointers in D?

Thanks in advance!

DMD 2.080
DerelictVorbis 2.0.0-beta.2

[0] https://github.com/DerelictOrg/DerelictVorbis


More information about the Digitalmars-d-learn mailing list