Page 1 of 5

Bug reporting thread

Posted: Mon Jan 20, 2014 10:21 pm
by nextvolume
Hi, I stumbled on a major problem.
The common trick to get the size of a file:

Code: Select all

int sz;
fseek(myFile, 0, SEEK_END);
sz = ftell(myFile);
fseek(myFile, 0, SEEK_SET);
doesn't work, and reports that it is impossible to seek beyond a file.

For now, the most reliable workaround I've found is getting the size of a file by using
internal structure members, in this way:

Code: Select all

sz = myFile->f.size;
this will work, but this isn't portable and internal structure members may change in the future.

Re: Issue when getting file size

Posted: Mon Jan 20, 2014 11:59 pm
by andymc
Oops. Hmm, sounds like an error in the file stream code maybe.

I've never tried getting the file size that way - I've always used stat() :oops:

(you can do that in the meantime, I guess, until I fix the bug)

Re: Issue when getting file size

Posted: Wed Jan 22, 2014 2:39 pm
by nextvolume
By the way, I have found another reproducible bug.
If one creates a window, calls windowGuiThread() but without making the window visible beforehand, and terminates the program (for example by pressing Ctrl+C in the shell), Visopsys may crash.

The following example code can reproduce the bug:

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/api.h>
#include <sys/window.h>

static objectKey win;
static int program_exit = 0;

int main(int argc, char *argv[])
{	
	win = windowNew(multitaskerGetCurrentProcessId(), "Bug Reproducer");

	windowGuiThread();

	while(!program_exit);
	return 0;
}
P.S.: We really need a bug report topic, and this topic could be renamed to be it.

Bug reporting thread

Posted: Thu Jan 23, 2014 12:44 am
by andymc
nextvolume wrote:P.S.: We really need a bug report topic, and this topic could be renamed to be it.
Great idea :-)

Re: Bug reporting thread

Posted: Fri Jan 24, 2014 7:57 pm
by nextvolume
The implementation of strlen() in Visopsys has a subtle behavior; if the function goes farther than a number of characters (by default 4096) it returns and reports an out-of-boundaries error. While not strictly a bug report, this behavior is not standard, and I think it might be desirable to not limit the distance at which strlen() can go into the string.. also because a lot of software uses strlen() on big buffers, especially simple parsers.

Re: Bug reporting thread

Posted: Sat Jan 25, 2014 12:45 am
by andymc
nextvolume wrote:The implementation of strlen() in Visopsys has a subtle behavior; if the function goes farther than a number of characters (by default 4096) it returns and reports an out-of-boundaries error. While not strictly a bug report, this behavior is not standard, and I think it might be desirable to not limit the distance at which strlen() can go into the string.. also because a lot of software uses strlen() on big buffers, especially simple parsers.
You're right, it's true. I'm torn, though. It's easy for a programmer to forget to terminate a string, and I thought this seemed like a reasonable fail-safe. Basically, I set what was intended to be a system-wide maximum string length. It's used for various things, and hopefully makes things a bit less crash-prone.

I guess the question is, is being compliant with the standard C library definition the right thing to do, even when the function is inherently unsafe?

I'm open to changing it though, if people feel strongly about this.

Re: Bug reporting thread

Posted: Sat Jan 25, 2014 11:11 pm
by nextvolume
In my humble opinion, the benefits gained from switching to standard behavior for strlen() outweigh the shortcomings; it makes porting existing software much easier.
A solution is keeping but renaming the current strlen() implementation to something like stringGetLength().

Re: Bug reporting thread

Posted: Sat Jan 25, 2014 11:38 pm
by ap0r
What a huge breaktrough will be once someone ports a C++ compiler to visopsys :) that way you will not need linux to code visopsys programs

Re: Bug reporting thread

Posted: Sun Feb 02, 2014 5:42 pm
by andymc
It's not too too difficult, I think.

First you would need to create a cross-compiler of GCC that can compile Visopsys programs without all the special command-line arguments (so that it uses the correct include files and libraries, etc).

Second step is then to compile that GCC with itself, and voila: you have a native GCC for Visopsys.

At least that's how I remember the process.

Snake crash

Posted: Sat Jul 12, 2014 4:49 pm
by ivan
Hi, I getting a error while playing the Snake game. After a few games, when I started again, it show me an exception alert
at address 00000000. At this moment I had minimized two Programs and one File Browser windows.

Image

Then I closed the Snake game, and I went to the Windows menu for close the minimized apps, then I get another crash at address 00000002.

Image