sanos home
sanos change log
If you want see the latest changes from the latest unstable version take a look at the
CHANGES file. A description of the early
history of sanos before version 1.2.4 can be found here.
Version 1.3.4 (Mar 8, 2012)
- The ctohtml tools no longer generates self links.
- Fixed bug in vfs, where file objects where not detached from io waiters.
- Added /proc/devstat to display device I/O statistics.
- Changed the secondary boot loader to use BIOS for loading kernel.
- Implemented virtio block and network device drivers for paravirtualized device io.
- Implemented support for __declspec MSVC extension in C compiler.
- Implemented $(VAR:pattern=replace) support in make.
- Added makedepend utility to sdk.
- Added filelength() and filelength64() to io.h.
- Refactored stdio routines.
- Added support for outputting linker map file from C compiler.
- Implemented C source to HTML conversion tool.
- Updated C compiler to Tiny C version 0.9.24 and implemented support for
MSVC 64-bit integer extension (__int64 type and 0i64 constants).
- The user-mode applications and the C runtime library can now be built
under sanos using the C compiler and the assembler.
- Added assembler (nasm).
- Added make, ar, and impdef utilities.
- Added regex library.
- Added support for serial console.
- Fixed bug in DMA setup for IDE/UDMA mode.
- Added detabbing to editor and goto begining and end of file.
- Fixed bug in pthread_barrier_wait (zhanglei8893).
- Fixed building using Visual C++ 2008 (Marius K). Sanos can now be built using
the following command:
NMAKE sanos MSVC=9
- Fixed problem with mounting cdrom under QEMU. The ide feature register needs to be
cleared before doing an ATAPI packet command in order to signal that it is a PIO
transfer.
- Added French keyboard table (Rio).
- Fixed bug in ide driver that prevented UDMA to function correctly
with QEMU.
- Modified video driver for ANSI color attributes (Girdosky).
- Added miomap() and miounmap() to virtual memory manger to allow memory mapping
of memory based device resources to user mode accessible virtual memory regions.
This is useful for mapping frame buffers on graphic cards.
- Added original copyright notice to some library source files.
- Refactored IDE UDMA code.
- If APM power down fails, the apm driver tries to engage power
management, and tries power down again.
- Some ATA controllers failed HDIDENTIFY, returning garbage. Now the ide
driver waits until the controller asserts DRQ before reading the
parameter block.
- Added tm_gmtoff and tm_zone fields to struct tm in time.h.
- Added math routines in math.c.
- Added rusage() in sys/resource.h.
- Sanos can now be build using Microsoft Visual Studio 8. The sanos.sln solution
now uses the makefile for building sanos. The old Visual Studio 7 solution
has been renamed to sanos-vc7.sln.
- Fixed bug in hfree() that could crash the kernel (JHO).
- VMWare VMI implemented.
- Implemented physical/virtual machine interface. This interface allows the kernel to
run parvirtualized on top of a virtual machine monitor.
- Cleaned up port I/O functions (_inp -> inp, ...).
- The kernel now uses the BIOS memory map to initialize the
page frame database
- Pathname pattern-matching with glob() and fnmatch() added to libc.
- Renamed jobs to processes.
- Kernel related files moved from /bin and /etc to /boot.
- Implemented vfork() and exec(). It uses setjmp()/longjmp() to emulate the
behaviour of vfork()/exec(). The exit() function also resumes active vforks.
Also waitpid() and wait() has been implemented. The new getchildstat() and
setchildstat() are used for tracking zombie child jobs. A SIGCHLD is generated
when a child terminates.
- STDIN_FILENO, STDOUT_FILENO, and STDERR_FILENO added to unistd.h.
- Basic POSIX signal handling implemented. The following functions have been
implemented:
alarm(), kill(), sigaction(), sigprocmask(), sigpending(), sigsuspend(),
sigismember(), sigdelset(), sigaddset(), sigfillset(), sigemptyset(),
sendsig().
- Current directory per thread implemented.
- New MODLOAD_NOSHARE flag for load_module() to prevent sharing when
loading an executable file. This can be used for preventing aliasing
of global variables for executable files.
- The wait() function has been renamed to waitone() to avoid
clash with POSIX wait().
- Added header files: sys/param.h, sys/times.h, inttypes.h
- Support for local heaps by defining USE_LOCAL_HEAP. The heap size and
commit increment are now initialized from the PE header
of the executable. The global heap uses os.dll for heap parameters.
- Jobs now have ids that can be used to simulate process ids. Each job also has
a parent job and a handle to the main thread. The getjobhandle() function
returns a new handle to the main thread of the job. The getpid() and getppid()
functions have been implemented. The P_CHILD flag for spawn() can be set
to create a child job.
- Kernel thread handles are now protected from being closed from
user mode applications.
- New shell command keybd for changing keyboard layout.
- Environment variables has been implemented. Now each job has its own copy of
environment variables which are inherited by the jobs they spawn. The setenv(),
putenv() and unsetenv() functions has been implemented. The spawn() function
now takes an env parameter which can override the default environment. A
set command has been added to the shell to display and set environment variables.
- Support for VMDK virtual disk image format used by VMware and Qemu. The mkdfs tool can
now generate vmdk images directly using the -t option. This enables creation of disk
images for PC emulators in the build process. By using 'nmake boothd' a bootable harddisk
image can be built.
- Implemented isinf(), isnan(), and isfinite(). The printf() now handles
denormal (INF and NaN) float values correctly.
- SMBIOS driver added to kernel. The SMBIOS driver is use for retrieving
system management information from the SMBIOS structures.
- Added malloc_usable_size() function to memory allocator. This returns the usable
size of an allocation.
- Bug in ftpd fixed that could cause a connection to loop with the last command
when connection was broken (TTA).
- The C runtime library can now be used with the Tiny C compiler.
- Fixed various bugs in UDP socket module (DSA):
- The source ip and port could be garbled in recvmsg().
- Socket was not implicitly bound on sendmsg().
- After message was sent with sendto() the socket was permanently connected to the destination.
- Additional checks on input parameters.
- Added tulip network driver.
- The toupper() and tolower() macros did not properly check the character type
before conversion. This problem has been fixed (SMC).
- The poll() function for waiting for events on a set of file descriptor has
been implemented. The sys/poll.h header file has been added.
- Added /proc/virtmem to display an overview of all mapped virtual memory.
- Fixed parsing of IP headers in ping command.
- Sanos can now boot without the /etc/krnl.ini and /etc/os.ini using only
default values.
- When a driver fails initialization the driver module is no longer unloaded.
This is to prevent kernel crashes when drivers fail without proper cleaning
up of aquired resources.
- Fixed bug in dfs files system that could corrupt a directory when adding entries.
- Qemu does not seem to respond correctly to a REQUEST SENSE atapi command. The
final interrupt is missing. This prevented mounting of cdrom drives under
Qemu. The cdfs now only revalidates the cdrom drive if the revalidate option
is given in the mount command. This allows successful mounting of cdrom
drives when running sanos under Qemu.
- The stack is now moved to 0:7c00 before boot image is read in the cdemboot boot
sector. This prevents overwriting the stack when reading the boot image.
Now booting from cdrom under Qemu works correctly.
- Added getopt() function.
- Added frexp() function to msvcrt to enable Hotspot Server JVM to load.
- The size of the buffer in cfltcvt() output.c was only 80 bytes long. This has
been changed to CVTBUFSIZE to prevent buffer overflow in ecvtbuf() (YBO).
- The remote debugging protocol has been changed to include more information on
connect and now uses run length compression of data blocks to speed up transfer
over serial lines.
Version 1.3.3 (Oct 20, 2005)
- GetLogicalDrives() in kernel32 implemented.
- A bug in cmd_ipconfig() in sh.c prevented proper display of network
configuration if no DNS servers was configured. This problem has been fixed.
(FGA)
- New -a option added to mkdfs to support file lists with alternative files
names. This simplifies configurations with both debug and release builds.
- The Visual Studio wizard can now generate a floppy disk boot image
configured for the application.
- Shell prompt can be configured by setting the prompt property in the
[shell] section of the os.ini file.
- If command line arguments are given to the shell it now executes the
built-in command and exits the shell.
- The floppy motor timeout routine now acquires the floppy mutex before
turning off the motor in order to prevent race conditions.
- Advanced Power Management (APM) support implemented. The computer can now
be powered off after os shutdown. The mode parameter for exitos() can be used
to specify the shutdown mode (halt, reboot, poweroff, debug). A shutdown
command has been added to the shell. The power status can be retrieved using
/proc/apm.
- Added /proc/cpu for CPU information.
- The raise() function now returns an error if the signal number is invalid.
- Breakpoint traps are now sent to the user mode signal handler. This allows
breakpoints to be handled by user mode code.
- Signals now exits the currently executing job with the signal number as
exit code. However, if the debug flag in the PEB is set the debugger is
entered if an unhandled signal is encountered. The debug flag can be set using
the debug command in the shell. The debug flag can be configured using the
debug property in the [os] section of os.ini. The default value of the debug
flag is 0, unless the system is build in debug configuration.
- readv() and writev() implemented in vfs.
- The kernel log is now implemented by the device driver /dev/klog. The
kernel log now support ioctl for waiting for new log entries in the kernel
log. The kprintf has been extended to support different log levels.
- The syslog interface has been redesigned in to comply with POSIX. The
syslog now supports logging to a syslog server by setting the loghost property
in the [os] section of os.ini.
- New klog daemon to read entries from the kernel log (/dev/klog) and add
them to the system log.
- The sockaddr and sockaddr_in structures has been change to conform to
winsock definitions.
- The sleep() function has been renamed to msleep(). A new POSIX conformant
sleep function has been added to unistd.h.
- Added sys/time.h header file. Also added tzp parameter to gettimeofday()
for POSIX compliance.
- New simple text editor utility (edit.exe) added.
- The syserror() function has been moved from libc.lib to the os.dll as an
exported os api call.
- readline() now uses stdin and stdout for input and output.
- Bug in iomux fixed. Now a monitored event signals the iomux and not the
associated object.
- Implemented popen() and pclose(). Also added a P_SUSPEND parameter to
spawn() to allow new jobs to be started suspended.
- The kernel version information is now kept in a version resource in
krnl.dll. The version information is retrieved using the new module version
information functions in verinfo.c.
- The build type can now be controlled by compile time switches. The kernel
version can be displayed in the Windows Explorer by viewing Properties for
krnl.dll and selecting the Version tab.
- User management added to kernel. Each thread is now assigned to a user and
a group. A thread has both a real and an effective user and group owner. The
{get|set}[e]{uid|gid}() functions can be used to change the effective and real
user and group for a thread. When a new thread is created the effective user
and group are inherited from the creator thread.
- Added functions to query /etc/passwd and /etc/group files.
- New whoami, id, chmod, and chown commands added to shell. The format of
the output from ls has been changed to display the file permission info.
- New file system version for DFS. The new version supports user and group
owner for files and directories as well as permission bits. The new DFS
version also supports files larger than 2GB. The fchown() and chown()
functions has been added to vfs.
- DES-based crypt() implementation added.
- The spawn() function now computes the pgm parameter from the cmdline
parameter if the pgm parameter is NULL. The initpgm and initargs properties in
the [os] section of /etc/os.ini has been replaced with a single property named
init. The default for init has been changed to /bin/sh.
- The behavior of the initial application has been changed. Previously the
os shut down after the initial application exited. Now the initial application
is executed again if it exits.
- Telnet daemon moved from the shell to separate server (telnetd.exe). The
new telnet daemon has a more robust handling of the telnet protocol. The
telnet daemon invokes the new login utlity in order to log on user.
- FTP daemon implemented.
Version 1.3.2 (Apr 3, 2005)
- The fdmotor task in the floppy driver has been replaced by a timer.
- Standard POSIX/ANSI API routines now returns -1 on error and set error
code in errno to comply with POSIX/ANSI standard.
- Added format option to dfs mount options to allow a device to be formatted
when mounting. This is useful for ram disks. Also added progress option to log progress
messages during formatting of device.
- The file system now has a separate step for destroying the file object
after all locks has been released. This should prevent race condition when
reads/writes are pending when the file is closed. This could lead to kernel panic because
the file object was destroyed while being accessed in the read/write routines.
- Changed err_tcp() in tcpsock.c to set IOEVT_CLOSE if the error code is
ERST. This will trigger a socket in readfds in select() when the connection has been reset
by the peer.
- The kernel now uses a dual licensing scheme allowing both BSD and GPL
license. The overall kernel license mode can be set by compiling with -D BSD
or -D GPL. Individual source files can use these defines for conditional
compilation. The /proc/copyright is adjusted to reflect the overall licensing
mode of the kernel. The license() kernel api routine can be used in kernel
modules for runtime checks of the kernel license mode.
- Suspending all user threads when shutting down.
- Raw sockets implemented.
- Ping command added to shell.
- Header files added for ANSI/POSIX compliance: netdb.h, stdint.h, sys/uio.h,
arpa/inet.h, netinet/in.h, netinet/tcp.h, sys/select.h, sys/socket.h.
- Now stat() and fstat() only returns the length of the file if the second
argument is NULL. Otherwise, stat() and fstat() returns 0 on success to comply with POSIX.
- The dirent struct renamed to direntry to avoid name clash with POSIX
standard. Also, the opendir has been renamed to _opendir, and readdir has been renamed to
_readdir.
- Implemented opendir(), readdir(), rewinddir(), and closedir() according
to POSIX and added dirent.h include file.
- Implemented alloca() and added alloca.h header file.
- Primary path separator can now be configured in krnl.ini.
- Added realpath() to stdlib.c.
- The Visual Studio Wizard now supports extended project directory
structure.
- Project files now uses Release and Debug as configuration instead of SanOS and SanOSDebug.
- Port I/O definitions moved from krnl.h to iop.h.
- load() renamed to dlopen(), unload() renamed to dlclose(), resolve()
renamed to dlsym() for POSIX compliance. The dlfcn.h header file added.
- Added CREATE_POSIX flag for beginthread() in order to support POSIX
thread function signatures.
- Threads are now being signaled on termination.
- getthreadblock() system call implemented.
- POSIX thread support added. Added sched.c, sched.h, semaphore.c,
semaphore.h, pthread.h, pthread.c, mutex.c, condvar.c, barrier.c, rwlock.c, spinlock.c.
- utime.h header moved from include/sys to include.
- uname() implemented and utsname.h header added. uname command implemented
in shell.
- chsize{64} renamed to ftruncate{64} and added to unistd.h.
- flush() renamed to fsync() and added to unistd.h.
- Added strtok_r() to string.h.
- Fixed bug in password encoding for smbfs
- Added new API routines to wsock32 and kernel32 to better support java nio.
- Added /proc/screen to capture the contents of the console screen buffer.
- The shell now supports execution of initialization script. The script file
is specified using the initcmds property in the [shell] section in os.h. Each
line in the file is executed as a shell command. An exec command has been
added to the shell to allow execution of script files.
- If no hostname has been configured, the network initialization code now
tries to find the hostname for the computer by making a DNS query on the assigned IP address.
Version 1.3.1 (Oct 25, 2004)
- Added hlt to idle task to decrease CPU usage when running under VMWare
(TSU).
- Added uk keyboard bindings (TSU).
- The static modifier removed from internal routines in sysapi.c to prevent
"over-optimization" of the stack frames (TSU).
- The configuration from /etc/os.ini has been renamed from config to
osconfig.
- The add_to_history() function in readline.c is no longer static and
now has a prototype in stdlib.h.
- The os.vcproj file has been modified to explicitly set the /GF /Gy /Oi
/Ob1 flags. Now the project file is converted correctly to VC7.1 format (TSU).
- VT102 support in console driver.
- Atomic operations added in atomic.h.
- Instance counting added in crt0.c to properly initialize/terminate the
crt.
- Guard pages implemented.
- Support for JDK 1.4.2.
- Changed stack guard page support to comply with win32.
- The jinit utility can now load configuration from alternative ini file.
- ifconfig command implemented in shell.
- /proc/dhcpstat implemented.
- Bug in GetFileTimes() fixed.
- _open_osfhandle() in msvcrt leaked file handles. This has been fixed.
- Console input implemented using readline() in msvcrt.
- tempnam() added to stdio.h.
- sys/utime.h added.
- Self handle for thread now stored in TIB.
- Improved C++ compatibility in Standard C library. All function
declarations now in extern "C". The standard new and delete operator
implemented.
- mkmutex() and mutexrel() implemented.
- pread() and pwrite() implemented.
- Intrinsic math functions implemented (acos, asin, cosh, pow, sinh, tanh).
Version 1.3.0 (Aug 8, 2004)
- cd support added to ide driver.
- cdfs iso9660 filesystem implemented.
- SetFilePointer() implemented in kernel32.
- kbhit() and putch() implemented in conio.c.
- setjmp() did not return the correct value from longjmp(). This problem has
been fixed.
- Intrinsic fmod function (_CIfmod) implemented.
- The stdin, stdout and stderr macros in stdio.h required os.h to be
included to define the job structure. This is no longer needed. The standard
files are now resolved using the __stdhndl() function in the stdio library.
- mode parameter added to mkdir() for ANSI conformance.
- chmod() and fchmod() system calls implemented. No file systems yet
implement these.
- The user time for /proc/loadavg was counted as dpc time. This problem has
been fixed.
- sysinfo() implemented. GetSystemInfo() and GlobalMemoryStatus() in
kernel32 now returns correct values.
- Code cleanup in msvcrt.h. All exports moved to msvcrt.def.
- TCP keep-alive packets was not acknowledged correctly. This could lead to
connections where the peer had KEEPALIVE enabled to be terminated after long
periods of no activity. This problem has been fixed by also sending an
acknowledge for TCP segments that fall outside the current window.
- Changes from lwIP 0.6.4 added to networking code:
- Check for short packets in icmp.
- ICMP transmit buffer changed to PBUF_IP.
- ip_id in ip_output_if() changed to static.
- Checksum folded into 16-bit in chksum().
- The TCP retransmission time-out backoff corrected.
- Segments in ooseq, unacked and unsent are now removed on abort.
- Check for pcb already in listen mode in tcp_listen().
- TCP retransmission of unacknowled segments moved to tcp_rexmit().
- The snd_wl1 was not initialized correctly.
- If accept fails in SYN_RECVD, EABORT is retuned to prevent further
processing of pcb.
- Segments on unacked now removed before segments on the unsent list.
- Now also sending an acknowledge for TCP segments that fall outside the
current window.
- Only direct UDP packets which does not match perfectly to unconnected
pcbs.
- Check for short packets in udp.
- Support for kernel options supplied by the loader added. The kernel options
are
embedded in the loader. The mkdfs utility now have a -K option to set kernel
options
for a bootable image. The setup utility has been updated to allow kernel
options to
be specified in the sysprep section.
- The ide device driver now supports the ideprobe kernel option to disable
probing of
ide devices. When ideprobe=0 the BIOS settings are used to determine the
number of disks.
- Renamed format() syscall to mkfs().
- Boot from CD-ROM using El Torito implemented. The system is booted in No
Emulation
mode. The BOOTIMG.BIN contains a small DFS filesystem (512K). A special boot
sector
(cdboot) loads the secondary boot loader (osldr) from the image and starts it
using
boot drive 0xFF. The secondary bootloader has been relocated to 0x00090000 to
allow
the boot image to fit into low memory. It loads the kernel from the boot image
and
starts the kernel. The kernel boots the system using the boot image
(/dev/initrd)
as root file system. The rest of the CD is mouted on /usr to allow access to
the
entire CD. The boot ISO image can be created using the mkisofs tool.
- Boot from network using PXE implemented.
- Escape character changed from '\' to '^' in .ini files.
- The hd driver failed to read multiple sectors per read command. This problem
has been
fixed. The status register is now read before the next sector is read in the
dpc
handler. This reenables interrupts from the IDE controller before the last
byte of
the current sector is read.
- UDMA mode disabled in IDE driver for VMware disk drives.
- File objects are now I/O objects. This is the first step in enabling
selectable
file handles, i.e. allow for using select() on file handles. While this is not
very
useful for regular files it is interesting for devices and pipes.
- Support for select() for device drivers implemented in device manager.
Device drivers
must call dev_setevt() and dev_clrevt() to signal events. A flag parameter has
been
added to dev_read() and dev_write(). This parameter is used to indicate
non-blocking
I/O operations (DEVFLAG_NBIO).
- Support for select() and non-blocking I/O for pipe file system. O_NONBLOCK added to flags in open() and ioctl() support for FIONBIO for file
objects.
- Added job list to PEB. The jobs command in the shell can now be used to
display
all running jobs.
- The kernel startup has been changed to open only one file object for the
console. Then
three handles are allocated for the initial stdin, stdout and stderr.
- The get_option() routine failed to handle parameters without values. This
problem has been
fixed.
- system() now uses spawn() to execute new program.
- Enabled cursor on console when kbhit() is called.
- Real mode os loader initialization implemented as DOS stub for osldr.dll.
Now the
boot sector calls the real mode entry point in real mode. The real mode
startup
initializes the system, enters 32-bit protected mode and calls the protected
mode
startup routine in osldr.dll. This simplifies the boot loaders and removes the
512 byte
limitation on real mode initialization code.
- Support for compressed boot image for initial RAM disk.
Version 1.2.9 (Sep 19, 2003)
- New mkfloppy utility for writing raw floppy disks.
- TCP connections are now reset before kernel shutdown or reboot.
- Serial transmitter could hang. Interrupts are now disabled when draining
the transmit queue to prevent race condition with interrupt service routine.
The transmitter is now started directly by the write routine. Previously the
transmitter was started by the DPC. The interrupt service routines now also
checks for multiple interrupt indications per interrupt.
- New Visual Studio wizard for creating sanos application projects.
- Scheduler enhancements:
- Number of thread priorities changed from 8 to
32.
- Scheduler now uses a thread ready summary to determine next thread to run.
- Win32 thread priority mapping changed to new 32 level priority system based
on normal priority class mapping.
- User mode code only allowed to set priority levels 1-15.
- User mode code not allowed to change priority for kernel threads.
- Dynamic and base priority for threads implemented.
- Priority boosting implemented.
- Quantum units are now charged after restarting waiting thread.
- Preemption when threads with higher priority than running thread
ready implemented
- TCP port numbers initialized on startup to random value in range 4096-5120.
- Processor load information (/proc/loadavg) implemented.
- Shell code cleaned up. Help texts added. Better argument checking.
- Buffer overflows fixed in module loader.
- Send and receive timeouts (SO_SNDTIMEO and SO_RCVTIMEO in setsockopt()) implemented for TCP sockets.
Version 1.2.8 (Jun 24, 2003)
- Garbage was outputted when printing negative numbers using printf. This
problem has been fixed.
- lseek() failed with -EINVAL when seeking on a device larger than 2GB. This
prevented fdisk from working on disks larger than 2GB. This problem has been
fixed.
- The fddone flag in bootfd.c has been marked volatile to prevent
optimization of interrupt wait loop.
Version 1.2.7 (Jun 04, 2003)
- When a file or socket object was closed the kernel object was accessed in
hfree() after being freed. The file and socket objects are now freed in
destroy_object() to avoid this problem.
- Handles to kernel objects was not removed from the handle table if the
handle count was greater than one. This problem has been fixed.
- Closing a socket now sends a IOEVT_CLOSE event to attached iomux. This
signals a select() on a socket to return when one of the read sockets are
being closed by the application.
- File was marked as modified when using futime() with dfs. This was
overwriting the mtime for the inode when the file was closed. Now the inode is
just marked dirty.
- Floppy device was not detected unless floppy disk was inserted. This
problem has been fixed by delaying initialization of fdc until first use.
- Added queue to loopback adapter.
- The yield() routine now discards the remaining quantum for the thread
before yielding.
- Loopback packets to own address are now redirected in ether_output().
- In syscall() in kernel the error code from system calls was set in the err
field in the tib. This overwrote the stderr handle for the thread. Now the
errnum field is correctly set in the tib.
- Garbage returned by WSAGetLastError() because tib->err was mistakenly used
instead of tib->errnum. This has been fixed.
- The value of errno is now the positive version of the error number instead
of the negative.
- dup2(), creat(), sopen(), umask(), eof(), and access() added.
- File sharing, permission mode and additional open flags (O_TEMPORARY,
O_SHORT_LIVED, O_DIRECT, O_SEQUENTIAL, O_RANDOM) implemented for smbfs.
- Temporary files added to dfs (O_TEMPORARY flag in open()).
- tell() did not correctly return the file position. It just flushed the
file. This has been fixed and tell() now returns the file position.
- vfs and smbfs now supports large files (>2GB).
- stat64(), fstat64(), tell64(), lseek64() and chsize64() added to os
interface.
- stat() and fstat() changed to conform to ANSI standard.
- Modified signal() and raise() to conform to ANSI standard. Signal info can
be obtained in signal handler by using getsiginfo(). The sendsig() function
can be used to raise signals with context info.
- Support for 64 bit integer arithmetic. All compiler support routines for
64 bit integer operations implemented in libc.
- CreateFile() and SetFileTime() implemented in kernel32.
- WIN32 structured exception handling implemented in kernel32. When kernel32
is loaded it takes over the global signal handler and dispatches the
exceptions in the exception chain in the TIB.
- MSVCRT exception handling implemented.
- setcontext() implemented.
- Added more complete ANSI Standard C Library. Many standard header files
has been added to the include directory (conio.h, errno.h, fcntl.h, float.h,
io.h, malloc.h, math.h, memory.h, process.h, share.h, signal.h, stddef.h,
sys/types.h, unistd.h), and prototypes has been moved to their ANSI specified
standard headers.
- The thread ready queues could become corrupted if a thread that was
already ready was marked ready again. This could lead to kernel traps in the
object manager because of faulty dispatching of threads. This problem has been
fixed, by linking the threads on the ready queues in double linked lists and
introducing new thread states. Now only threads in ready state are in the
ready queues.
- Added job object to group threads executing an application. The
CREATE_NEW_JOB flags can be used in beginthread() to start a new job. The
spawn() function can be used to start an application in a new job.
- /dev/random and /dev/urandom devices added.
- BSD style random number functions added to lib.
- New stdio implementation with buffering, unget, and support for printf and
scanf processing.
- C/C++ initializes and terminators are now processed by the crt
startup/shutdown code include atexit() handlers.
- Math routines using the i387 instruction set added to standard C library
(acos, asin, atan, atan2, ceil, cos, cosh, exp, fabs, floor, fmod, frexp,
ldexp, log, log10, modf, pow, sin, sinh, sqrt, tan, tanh).
- abort() now raises SIGABRT.
- div(), labs(), ldiv(), and system() added to stdlib.c.
- memccpy(), memicmp(), strset() added to string.c.
- strtod() and atof() implemented.
- asctime(), _ctime(), _strdate(), _strtime() added to time.c.
- /proc/bufstat added to buffer cache manager to show statistic for the
buffer cache.
- Previously exit() stopped the user mode code and shutdown the kernel. The
exit() routine now exits the currently executing job. The exitos() routine now
shuts down the kernel.
- Support for O_TEXT and O_BINARY flags added to vsf.c.
- connect() failed for local sockets. This problem has been fixed.
- calloc() reported out of memory if num was zero. This problem has been
fixed.
Version 1.2.6 (Feb 06, 2003)
- iomux did not work with IOEVT_WRITE. This problem has been fixed.
- getsockname() returned garbage in sin_port and sin_addr. This problem has
been fixed.
- getpeername() returned garbage in sin_addr. This problem has been fixed.
- New HTTP server implemented (httpd.dll).
- PE resource API implemented.
- Threads are now rescheduled after setprio() to immediately reflect the new
thread priority.
- New sis900 network driver implemented (sis900.sys).
- ls reported wrong size for files larger than 1GB. This problem has been
fixed.
- NIC support for multicast filtering. Implemented in sis900 and rtl8139.
Not yet implemented in network stack.
- /dev/cmos renamed to /dev/nvram.
- ether_crc() moved to src\net\ether.c.
- struct stats_nic moved to include\net\stats.h.
- lookup_board() implemented in dev.c.
- pci_{read|write}_config_{byte|word|dword} implemented in pci.c.
- Proper handling of kernel traps. Now enters debugger with correct
exception.
Version 1.2.5 (Jan 12, 2003)
- iomux kernel synchronization objects implemented.
- select() implemented.
- Support for building with Visual Studio 6.
- setjmp/longjmp moved from msvcrt to libc.
- Exceptions with signal() and raise() implemented.
- Revalidate partition drivers after fdisk.
- Bug in FPU context handling fixed.
- strftime() implemented.
- Bug loading DLL with no imports fixed.
- recv() call hangs when reading from a TCP socket which have been closed
by remote peer. This problem has been fixed. recv() now returns -ECONNRESET.
Version 1.2.4 (Dec 16, 2002)
- Implemented /proc/uptime to display time since boot up.
- Added readline() with command line editing, command history and
filename completion.
- Support for .exe applications in msvcrt.dll.
- Script action moved to script section in setup.exe.
- Removed safety pool code in pframe.c.
- Added tags to page frame database to identify memory usage.
- Added /proc/memusage.
- Renamed /os to /bin
- SO_BROADCAST implemented.
- Mapping of network errors to winsock error codes.
- Implemented main entry in libc with parseargs.
- Fixed bug in TCP retransmission.
- Made ne2000 driver work with WAFER.
- Return info on WSAStartup.
- Moved netif binding to os.c
- Reading netif parameters from [netif] in os.ini to allow static
configuration of ip address and dns servers.
- Added disabled netif for all packet devices on startup.
- Added ioctl() support for changing netif parameters.
- Added alloc_linear_pageframes() and alloc_pages_linear() for
allocating linear physical memory blocks.
- RTL8139 network driver implemented (rtl8139.sys).
- Added PCI subsystem identifier to driver binding code.
- Implemented Intel EtherExpress Pro100 NIC network driver
(eepro100.sys)
- Implemented lock count on objects. Objects are closed when handle
count reaches zero, and objects are destroyed when handle count and
refcnt reaches zero.
- Buffer leak in devfs set_inode_block() fixed.
- Support for lseek() beyond end of file in dfs and smbfs.
- Bug in register_interrupt_handler() caused kernel to hang on
startup. This problem has been fixed.
- Support for LBA mode for hd boot in osldr.
- Keyboard interrupt handling has been made more robust (failed on
xpc).
- sendmsg() and recvmsg() added.