forked from ringgaard/sanos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
1113 lines (720 loc) · 42.2 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
CHANGE LOG FOR SANOS
====================
Changes since last release
--------------------------
* VGA support.
* Add support for compiling with MSVC 11.
* Fix potential buffer overflow in vsprintf.
* Remove Visual Studio project files.
* Added support for cross-compiling under Windows.
* The NASM assembler is now built from source when building under Windows.
* New Makefile for building under Windows and new deployment script.
* Indent and unindent commands for editor.
* The printf routines now support %lld format for 64-bit ints.
* Added genvmdk utility for generating VMDK disk image files.
* The C compiler now generates PE import hints for DLL imports.
* Added strcasestr, strtoull, strtoimax, strtoumax, mkdtemp functions.
* Added basename and dirname shell commands as well as the basename()
and dirname() functions in libgen.h.
* Implemented support for hidden files in ls.
* Fixed handling of NetBIOS keep-alive packets in smbfs.
* Implemented support for tracking CPU time usage by threads. The times()
function now returns the system and user time as well as the accumulated
time used by terminated child threads. The threadtimes() function can
be used for getting CPU time information for any thread. The shell now
also implements the time command.
* Added find utility
* Added spawnve(), spawnv(), and spawnl() functions.
* Support for non-shared executable modules.
* Added binutils package.
* Fixed bug in fseek for relative seeks.
* Added _exit(), stpcpy(), and mkstemps() functions.
* Implemented support for memory mapped files.
* Renamed mmap syscall to vmalloc.
* Check memory permissions on system calls.
* Fixed recursive delete problem.
* Added sigsetjmp() and siglongjmp() to C runtime library.
* Added hypot() function to math library.
* New package management tool for installing programs.
* Added stub functions for file locking and termios.
* Added strsep(), vfscanf(), vfscanf(), and vfscanf() functions.
* Added zlib, awk, tar, yacc, ctags, zip, unzip and lua packages.
* Added new shell commands: chgrp, chmod, chown, cp, du, grep,
ls, mkdir, mv, rm, test, wc.
* Handle escaping of double quotes in command argument parsing.
* New POSIX-compliant shell with script support.
* Added support for script hashbangs in module loader.
* Text editor improvements:
- Undo/redo
- Multi-file support
- Open/New/Close editor
- Next/previous word navigation
- Support for files with tabs
- Text editor can now be build as Linux binary
- Text search and goto line
- Clipboard with cut/copy/paste
- Pipe command into editor buffer
- Read from stdin
- Read-only mode
* Add ln command to shell.
* Fixed bug in dfs rmdir so directories with multiple links can be removed.
* Added getopt_long(), usleep(), and nanosleep().
* Optimized memcpy() routine.
* Code generation using callee-saved registers (ebx, edi, and esi).
* Improved code generation for for-loops.
* Stack trace dump on abnormal termination.
* Implemented frame pointer omission in C compiler.
* Jump optimization in C compiler.
* Function-level linking in C compiler.
* Added support for setting thread name for user-mode threads.
* Changed C style.
* Added makefile for building Sanos under Linux using GCC. GCC is used
for compiling the Sanos build tools (cc, as, ar, mkdfs) for Linux and
using these to build Sanos. This means that you can build Sanos under
Linux without needing anything else than GCC.
* Sanos is now self-contained in the sense that it can build itself.
This includes the boot sector, boot loader, kernel, device drivers,
OS API, standard C library, assembler, C compiler, and utilities.
* Added check to dfs file system to prevent deleting non-empty directories.
* Fixed bug in dfs so reserved inodes are not marked as free when deleted.
* Added kernel install utility, mkboot, for installing boot sectors,
boot loaders, and kernels.
* Added support for phony targets in make utility.
* Code generation optimizations for C compiler:
- Optimize 'add/sub r, +/-1' to 'inc/dec r'
- Optimize 'mov r, 0' to 'xor r,r'
- Generate 'push imm' for constant function call arguments
* Set code and data section sizes for PE files in C compiler.
* The main Makefile has been updated so Sanos can now build under Linux
using WINE.
* New features in the C compiler:
- Support for masm inline assembler syntax.
- Support for __declspec(naked) in C compiler
- New -start option for specifying the start symbol
- New -fixed option for specifying the PE base image address
- MSVC compatible data type alignment
- Custom DOS stub and PE file section alignment
- Bug fix for unsigned integer constant folding
- Added pre-defined _TCC_VER macro with TCC version number
- Set execute bit for generated executable files
* Data segment registers are now inilialized by the kernel before starting
a user-mode thread.
* Updated webserver.c to compile both under sanos and linux.
Version 1.3.4
-------------
* 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):
o The source ip and port could be garbled in recvmsg().
o Socket was not implicitly bound on sendmsg().
o After message was sent with sendto() the socket was permanently
connected to the destination.
o 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
-------------
* 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 behaviour 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
-------------
* 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
-------------
* 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
-------------
* 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:
o Check for short packets in icmp.
o ICMP transmit buffer changed to PBUF_IP.
o ip_id in ip_output_if() changed to static.
o Checksum folded into 16-bit in chksum().
o The TCP retransmission time-out backoff corrected.
o Segments in ooseq, unacked and unsent are now removed on abort.
o Check for pcb already in listen mode in tcp_listen().
o TCP retransmission of unacknowled segments moved to tcp_rexmit().
o The snd_wl1 was not initialized correctly.
o If accept fails in SYN_RECVD, EABORT is retuned to prevent further
processing of pcb.
o Segments on unacked now removed before segments on the unsent list.
o Now also sending an acknowledge for TCP segments that fall outside
the current window.
o Only direct UDP packets which does not match perfectly to
unconnected pcbs.
o 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
-------------
* 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:
o Number of thread priorities changed from 8 to 32.
o Scheduler now uses a thread ready summary to determine next thread
to run.
o Win32 thread priority mapping changed to new 32 level priority
system based on normal priority class mapping.
o User mode code only allowed to set priority levels 1-15.
o User mode code not allowed to change priority for kernel threads.
o Dynamic and base priority for threads implemented.
o Priority boosting implemented.
o Quantum units are now charged after restarting waiting thread.
o 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
-------------
* 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
-------------
* 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
-------------
* 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).