[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: PSound updates
>Ok, there are some unclear points with your changes:
>* In OpenDir.cpp you enclose the
> if (Dir->Entry->NameIsCopy != 0)
> delete [] Dir->Entry->Name;
> lines in #if 0 , #endif. Why? Doing so creates a memory leak.
>* Same file, in functions ReadDirVirt and StatVirt you changed
> Entry.Name = DirE->GetName ();
> Entry.NameIsCopy = 0;
> to
> Entry.Name = Strdup(DirE->GetName ());
> Entry.NameIsCopy = 0;
> Copying the string isn't neccessary at all here, as the original
> (DirE->GetName ()) won't disappear while Entry.Name is used.
> Also, *if* the string is copied, Entry.NameIsCopy has to be set to
> != 0, so that it can be deleted again later (see the first point)
This problem has to do with constness.
DirE->GetName() returns a const char*
Dir->Entry->Name is a char*
The changes that I made here don't really solve the problem.
This was just something I did in a hurry. I didn't write the original code
and I still don't know it very well.
>* In Win32.cpp: ChdirPlain () always gets a native path as input. That's
>guaranteed. So no need to convert the string in there.
Going through with the debugger reveal that it receives a string like
/d/some/path. That extra bit of code changes it from /d/some/path to
d:/some/path
Most of the problems with the code have to do with the drive letter.
d:/some/path gets modified to /d/some/path. The initial / gets chopped off
and the path becomes d/some/path. The path is then given as a *string* to
URLInfo::Init which assumes that it is a relative path.
I managed to get pfile_basic to work - it displays success - but there are still
some warning messages.
URLInfo::ToNative complains that d:/some/path can't be converted to native.
I guess I haven't quite done things properly when putting the drive letter back
in
the right place.
I think that the code could be improved by breaking some of the functions
down into smaller ones.
>>> path = copied_path;
>That's wrong. The "path += offset;" line sets "path" to the right point
>*in* copied_path (behind the leading slashes). Theoretically. I'll change
>it to a version that works a bit better...
When I did this I didn't under stand what this little bit of code was doing:
>>>>>>>
ppOffsetT offset = copied_path - original_path;
path += offset;
int i;
for (i=0 ; i < part_count ; i++)
{
part_start [i] += offset;
}
<<<<<<<
All I knew was that it wasn't working properly, due to changes to the path
that weren't refelected in part_start (ie /d/ to d:/).
The changes I make often don't modify other things that they are supposed to,
as I don't know enough about the code. eg this little thing about part_start and
part_length
>241a243,245
>> // the leading / always gets stripped off
>> // so a dos type path looks like c/blah/blob.txt
>>
>256a261
>> part_start[0]=&Path[2];
>Hmmmm......
>No. part_start[1] already points to Path [2]. So you "duplicate" one part
>here. correct would be
>part_start [0] = &Path [0] (with the Path pointer corrected to point to the
>real start of the path).
>But it *is* correct to change part_start[0] here.
>Fixing.
>>I only had 3 hours sleep on friday night (I went to a clan analogue
>>thing).
>I hope it was fun.
It was. I'll definitely try and go to the next one. Music sounds
so much better when you can feel it.
I liked Sub Bass Snarl the best.
B(if)tek, and 5000 Fingers of Doctor T were good as well.