9th April 15:45
eposix 1.9.5, beta 2, available now
-----BEGIN PGP SIGNED MESSAGE-----
It's my pleasure to announce eposix 1.9.5 beta 2. You can download it
User visible changes since the last release:
* Truly Unicode safe now.
* Separate manual with short/flat forms of classes.
New in 1.9.4 beta 1 - 2003-10-11
* GOBO_CC variable must now be bcb instead of bcc.
New in 1.9.3
* STDC_FILE.read_string and ABSTRACT_FILE_DESCRIPTOR.read_string
definition changed. It now follows Gobo's KI_CHARACTER_INPUT_STREAM
in reading just a bunch of characters, without regard for new line
* Use STDC_TEXT_FILE.read_line and ABSTRACT_FILE_DESCRIPTOR.read_line
for line reading.
New in 1.9.1
* license changed to Eiffel Forum Version 2, see
forum.txt. License is now FSF (GPL) and OSI (Open Software
* Added builtin HTTP server EPX_HTTP_SERVER. Useful to embed in
applications. Very primitive compared to a full-blown server.
* MIME parser extended and rewritten somewhat. Header stuff from
EPX_MIME_PART is now in EPX_MIME_HEADER.
* STDC_FILE and ABSTRACT_FILE_DESCRIPTOR now inherit from the Gobo
KI_CHARACTER_INPUT_STREAM and KI_CHARACTER_OUTPUT_STREAM
classes. This makes sockets, file descriptors and streams
plug-compatible with Gobo.
* non-blocking accept in the socket classes.
New in 1.9.0 - 2003-04-01
* Full socket (tcp/udp/unix) support on Unix.
* Windows TCP support.
ChangeLog since the last release:
2003-11-17 Berend de Boer <firstname.lastname@example.org>
* EPX_XML_WRITER.add_data (or puts) and set_attribute didn't
handle UC_STRINGs which contained real unicode characters.
2003-10-15 Berend de Boer <email@example.com>
* POSIX_ASYNC_IO_REQUEST is now Unicode string safe.
2003-10-14 Berend de Boer <firstname.lastname@example.org>
* EPX_STRING_HELPER.string_to_pointer does now work correctly for
UC_STRINGs. For SmartEiffel and VisualEiffel UC_STRING involve
creating a new string. For ISE a new string is only created when
the UC_STRING contains Unicode specific characters.
2003-10-11 Berend de Boer <email@example.com>
* Beta release 1.
2003-10-09 Berend de Boer <firstname.lastname@example.org>
* EPX_IMAP4_RESPONSE_SCANNER didn't recognize months after May.
* STDC_TIME.make_utc_date_time did not calculate the unix time
value correctly under certain occassions. Code entirely replaced
and I do the calculation myself now.
2003-10-07 Berend de Boer <email@example.com>
* Fixed postcondition bugs in STDC_TIME in set_date and set_date_time.
2003-10-04 Berend de Boer <firstname.lastname@example.org>
* Upgraded to autoconf-2.57 and automake-1.7.7.
2003-10-02 Berend de Boer <email@example.com>
* ABSTRACT_DIRECTORY.forth was not correct after rewrite in
1.9.3. Recursive browsing would end in a never-ending loop.
2003-09-27 Berend de Boer <firstname.lastname@example.org>
* Writing a unicode string to ABSTRACT_FILE_DESCRIPTOR was
incorrect for SmartEiffel.
2003-09-24 Berend de Boer <email@example.com>
* The GOBO_CC variable I was using should be equal to
ISE_C_COMPILER. But it seems I used bcc where ISE used
bcb. Corrected this. makelib now produces a lib with bcb in the
name like libeposix_ise_bcb.lib.
2003-09-09 Berend de Boer <firstname.lastname@example.org>
* EPX_XML_ROUTINES.is_valid_tag_name and as_valid_tag_name now
fully implement the XML specification.
2003-08-27 Berend de Boer <email@example.com>
* ABSTRACT_IP4_ADDRESS.make_from_integer and make_from_loopback
stored the IP address in host byte order.
* ABSTRACT_FILE_DESCRIPTOR.read_line's postcondition was
incorrect. last_string could be empty due to removal of
end-of-line character. In that case eof is still false.
* ABSTRACT_IP4_ADDRESS.make_from_integer didn't set its value.
* EPX_HTTP_SERVER now makes all parts in dynamic part available as\0
"part <part name>". It also makes them available as just "<part
name"> in case the field was not included in the form submission.
2003-08-22 Berend de Boer <firstname.lastname@example.org>
* alpha release 1.9.3.
2003-08-19 Berend de Boer <email@example.com>
* Fixed a type cast bug in the C code for posix_reportevent, where
anything other than Success events gave the dreaded The
description for Event ID cannot be found.
2003-08-18 Berend de Boer <firstname.lastname@example.org>
* STDC_FILE.put_string and ABSTRACT_FILE_DESCRIPTOR.put_string now
support Unicode strings. If the Unicode string contains actual
Unicode characters, writing them is slower as they require a new
string to be made to be written correctly.
2003-08-12 Berend de Boer <email@example.com>
* Recursive directory browsing did not pass the directory name to
a filter if one was set. Now it does, and if the filter returns
False, the subdirectory is not descended into.
* Added fix to STDC_TEMPORARY_FILE to garbage collect when a
"Too many open files" is encountered.
2003-08-05 Berend de Boer <firstname.lastname@example.org>
* Renamed abstract_EAGAIN to abstract_EWOULDBLOCK as this is
clearer. But for today's unixes it's equal to EAGAIN.
2003-08-04 Berend de Boer <email@example.com>
* The eposix implementations of YY_BUFFER for its STDC_FILE and
ABSTRACT_FILE_DESCRIPTOR now inherit from YY_FILE_BUFFER. This is
possible, because they now inherit from
KI_CHARACTER_INPUT_STREAM. This helped to remove a lot of code.
* The ARRAY to pointer conversion now uses the same mechanism as
STRING to pointer: the object is freezed, and has to be manually unfreezed.
2003-07-17 Berend de Boer <firstname.lastname@example.org>
* ABSTRACT_DIRECTORY.status can now return a not found
status. This can happen when the directory contains a symbolic
link to a non-existing file.
* ABSTRACT_STATUS_PATH has two new methods: make_may_fail and
refresh_my_fail. Both set the new found attribute. Use this to see
if the status could be retrieved successfully or not, without
raising an exception.
* ABSTRACT_DIRECTORY now skips entries that do not exist when a
filter is applied and the filter requires a status. Such entries
can be symbolic links that point to files that do not
exist. Status information is not available for such entries.
Note that in other cases the start/forth loop can still return non-existing entries.
2003-07-15 Berend de Boer <email@example.com>
* WINDOWS_STATUS_PATH (stat() on paths) was incorrect on
Windows. Windows doesn't like a trailing slash for
directories. It's now stripped before we attempt to get the status of something.
2003-07-10 Berend de Boer <firstname.lastname@example.org>
* eposix's configure now autodetects the location of the
SmartEiffel base.h file. This implies that earlier versions of
SmartEiffel than 1.1 should work fine again. This only works on
Unix. On Windows you still have to modify src/supportc/eiffel.h
* ISE signal handling now uses a frozen object. Experiment to see
if I can get signal handling on Windows for safe. I catch Ctrl+C
in a certain program and every now and then this leads to an
* Made signal handling safe. There was perhaps a corner case of a
few CPU instructions where a signal could occur when things were
not yet properly set up.
* Now use EIF_OBJECT in C code instead of EIF_OBJ.
2003-07-07 Berend de Boer <email@example.com>
* ABSTRACT_FILE_SYSTEM.resolved_path_name did change the
current directory when called.
* STD_ERRNO now includes the error number when it looks like the
error message was "Unknown error".
* STD_ERRNO no longer inherits from STDC_BASE. STDC_BASE used
STD_ERRNO and that lead to a form recursion that didn't look
Cleaned up the code in this class somewhat.
2003-07-04 Berend de Boer <firstname.lastname@example.org>
* STDC_FILE.read_string has a new definition: it no longer reads
line, but only a stream of bytes without regard for the new line
character. Use the new STDC_TEXT_FILE.read_line for line reading.
* STDC_TEXT_FILE.chop_last_string is obsolete. new line characters
are no longer present in last_string to remain compatible with Gobo.
* ABSTRACT_FILE_DESCRIPTOR.read_string does no longer do line
reading, but just reads a certain amount of characters. This is
new behaviour, and can potentially break code! But I think
compatibility with Gobo was worth it.
* ABSTRACT_FILE_DESCRIPTOR.read_line is no longer obsolete (was
made obsolete in alpha 1.9.1). It now implements the proper Gobo
functionality. This is essentially the behaviour implemented in
the last official release (1.6.x).
But it's signature is changed, to code will still break. Gobo's
read_line does not have an upper bound of the length of the
line. Also last_string does not contain the new line characters,
so chop isn't necessary.
* ABSTRACT_FILE_DESCRIPTOR and STDC_TEXT_FILE now inherit from
KI_TEXT_INPUT_STREAM (through EPX_TEXT_INPUT_STREAM). This implies
that their put_string (and obsolete write_string) routines no
longer take Void arguments.
2003-06-30 Berend de Boer <email@example.com>
* ABSTRACT_FILE_DESCRIPTOR inherited four read routines from
KI_CHARACTER_INPUT_STREAM. Those four are read_to_buffer,
read_character, read_string and read_to_string. They expected
blocking i/o. They are now renamed to non_blocking_read_character,
non_blocking_read_string, etc. They will enable blocking i/o for
the duration of the call. ABSTRACT_FILE_DESCRIPTOR has now two new
routines read_character and read_string that have the correct
contract for non-blocking i/o. This way, ABSTRACT_FILE_DESCRIPTOR
behaves blocking when used as KI_INPUT_STREAM, and possibly non-blocking otherwise.
2003-06-27 Berend de Boer <firstname.lastname@example.org>
* UDP and unix stream sockets did not set is_open_read and
is_open_write. This is needed, because descriptors now inherit
from Gobo. By not setting those, you couldn't read or write to those sockets.
2003-06-21 Berend de Boer <email@example.com>
* It now seems that not is_terminated and is_pid_set are synonyms,
perhaps will need to removing one of them.
* Fixed invariant violation in classes that inherited from
POSIX_DAEMON. Occurred when detach was called.
* IMAP4 parser did not correctly set the flags when a message was
retrieved, the flags were changed, and immediately after the flags
for that message were retrieved again.
* postcondition in EPX_URI.make_resolve could sometimes be false.
2003-06-19 Berend de Boer <firstname.lastname@example.org>
* alpha 1.9.2 released.
* BeOS networking stuff works. Non-blocking sockets don't, have to
call setsockopt it seems to do that.
2003-06-18 Berend de Boer <email@example.com>
* Postconditions of creation routines in
ABSTRACT_TCP_CLIENT_SOCKET and ABSTRACT_TCP_SERVER_SOCKET were
susceptible to garbage collection interception.
* Added creation routine open_by_name_and_port to
ABSTRACT_TCP_CLIENT_SOCKET. With this routine you don't have to
provide a resolved host name (EPX_HOST_PORT structure). Throws
exceptions if it cannot resolve.
2003-06-17 Berend de Boer <firstname.lastname@example.org>
* ABSTRACT_FILE_DESCRIPTOR.write and do_read contained a wrong
variant in its loop. Removed the variant. And indeed, that implies
that there is no guarantee the loop ever terminates. Perhaps need
to implement a counter and terminate after x times that we couldn't read/write anything??
* EPX_XML_WRITER now quotes the ]]> sequence. I thought it was
necessary only for compatilibity with SGML, but Xalan wants to see
* Removed EPX_XML_WRITER.insert_string as this routine is now in
ISE (since 5.2).
* Moved some once strings lie QuoteAmp from EPX_XML_WRITER to EPX_XML_ROUTINES.
2003-06-13 Berend de Boer <email@example.com>
* STDC_BASE.exceptions is expanded again. Works now in SE 1.1rc2.
* Moved as_valid_tag_name to EPX_XML_ROUTINES.
2003-06-09 Berend de Boer <firstname.lastname@example.org>
* Alpha release 1.9.1.
2003-06-05 Berend de Boer <email@example.com>
* Due to compilation errors with SmartEiffel, STDC_PATH now
inherits from STDC_PATH_BASE where incompatibilities regarding
is_equal and "<" are solved/hacked away.
2003-06-04 Berend de Boer <firstname.lastname@example.org>
* Moved certain queries that are XML specific, not EPX_XML_WRITER
specific from that class into EPX_XML_ROUTINES. Useful for adding
preconditions to routines that generate XML.
2003-06-02 Berend de Boer <email@example.com>
* Correctly implemented Gobo's
KI_CHARACTER_OUTPUT_STREAM.put_integer and put_double. The
write_***X methods will become obsolete in the future.
* Made STDC_FILE.put_character obsolete. It's meaning will change
to conform to Gobo's put_character so it can accept CHARACTER
instead of INTEGER.
2003-05-28 Berend de Boer <firstname.lastname@example.org>
* STDC_ENV_VAR.make is now exported to ANY as suggested by Marcio Marchini.
2003-05-22 Berend de Boer <email@example.com>
* EPX_STRING_HELPER.string_to_pointer for ISE didn't work when the
garbage collector was disabled.
2003-05-20 Berend de Boer <firstname.lastname@example.org>
* EPX_XML_WRITER indenting changed slightly. If an element had
data which ended in a new line, indenting caused spaces to be
added to the content of that element. Now no identing is done for
an element that contains data. A closing tag is just appended to
the data. An opening tag is also just appended to the data.
2003-05-15 Berend de Boer <email@example.com>
* EPX_XML_WRITER.is_a_parent required the presence of an equality
tester in tags.
2003-05-12 Berend de Boer <firstname.lastname@example.org>
* Added as_valid_tag_name to EPX_XML_WRITER to change a tag name
to a valid XML tag name. Not really 100%, but at least it replaces
spaces by a '-'.
2003-05-08 Berend de Boer <email@example.com>
* EPX_STRING_OUTPUT_FILE is now obsolete. Any eposix file class is
is now a KI_OUTPUT_STREAM.
* EPX_TEXT_INPUT_FILE is now obsolete. Any eposix file class is
is now a KI_INPUT_STREAM.
* src/epxs/imap code moved to src/epxc/imap4 as it is platform
* http tests moved to test_suite/epxc/.
2003-04-29 Berend de Boer <firstname.lastname@example.org>
* STDC_FILE.read_character could violate a precondition in CHARACTER
when fgetc returned -1 (EOF).
2003-04-26 Berend de Boer <email@example.com>
* Added decoders to decode MIME bodies for base64 and
quoted-printable. Use EPX_MIME_BODY.as_plain_text to get the
* EPX_MIME_PART header stuff now moved to EPX_MIME_HEADER.
2003-04-23 Berend de Boer <firstname.lastname@example.org>
* EPX_MIME_BODY has a new routine: as_plain_text to return the
body in 8bit text/plain format, as good as possible. For example a
BASE64 encoded body is decoded in such cases.
2003-04-22 Berend de Boer <email@example.com>
* Stopped parsing Received field for now, what a mess people place
* More improvements in MIME parser.
2003-04-21 Berend de Boer <firstname.lastname@example.org>
* STDC_TEMPORARY_FILE.make didn't set is_open_read and is_open_write properly.
2003-04-15 Berend de Boer <email@example.com>
* WINDOWS_STATUS_PATH had incorrect time fields. It seems to
change depending on daylight saving times. A lot of people seem to
know this bug, except Bill Gates. Another couple of hours lost,
because of a Windows bug.
* New method STDC_TIME.to_dos_seconds to change the seconds to an
* STDC_TIME now has methods to accept a broken down date or time
in UTC format: make_utc_date, make_utc_date_time and
make_utc_time. Employs some trickery, might not work correctly!
* STDC_TIME has now the proper preconditions to check if you
actually called to_local and to_utc.
* STDC_TIME has now status if time is in UTC or local time:
is_utc_time and is_local_time.
* New method STDC_BUFFER.append_to_string.
2003-04-12 Berend de Boer <firstname.lastname@example.org>
* Removed FILE_FLAG_POSIX_SEMANTICS when opening files for Windows
EPX_FILE_DESCRIPTOR. Certain files would just not open with
it. No idea why.
2003-04-11 Berend de Boer <email@example.com>
* non-blocking support for sockets under Windows added.
* Added sequential http server in EPX_HTTP_SERVER. Besides files
it can call servlet, see EPX_HTTP_SERVLET. Looks fairly complete
and robust, but still a work in progress.
2003-04-09 Berend de Boer <firstname.lastname@example.org>
* EPX_HTTP_10_CLIENT has methods for delete and post.
* EPX_MIME_FIELD_CONTENT_TYPE.value had the subtype and type components reversed.
2003-04-08 Berend de Boer <email@example.com>
* ABSTRACT_FILE_DESCRIPTOR.read_line and last_line are
obsolete. read_string and read_character can now safely be mixed with read.
2003-04-07 Berend de Boer <firstname.lastname@example.org>
* Fixed "bug" in EPX_URI path resolving. It seems that ISE's
ARRAY.resize operator does not lower `upper' if `upper' is less
than requested. If ISE did that, the code would be correct.
* STDC_PATH.is_absolute and STDC_PATH.is_resolved added.
2003-04-04 Berend de Boer <email@example.com>
* STDC_FILE now inherits from KI_CHARACTER_INPUT_STREAM and
KI_CHARACTER_OUTPUT_STREAM as well.
* ABSTRACT_FILE_DESCRIPTOR now also inherits from
* Fixed bug in not setting SO_REUSEADDR properly in ABSTRACT_TCP_SERVER_SOCKET.
2003-04-03 Berend de Boer <firstname.lastname@example.org>
* ABSTRACT_TCP_SERVER_SOCKET.accept supports non-blocking sockets.
* Started on EPX_HTTP_SERVER
2003-04-01 Berend de Boer <email@example.com>
* alpha release 1.9.0
2003-03-26 Berend de Boer <firstname.lastname@example.org>
* STDC_SIGNAL_SWITCH.dispose did access other objects in its
dispose. ISE Eiffel does not allow that.
2003-03-24 Berend de Boer <email@example.com>
* Windows EPX_EXEC_PROCESS now creates new processes with the
CREATE_NEW_PROCESS_GROUP flag. Without this flag, a Ctrl+C would
shut down any children as well (but not their children it
seems). I assume the new behaviour is more Unix like, but still
have to test it.
2003-03-22 Berend de Boer <firstname.lastname@example.org>
* HTTP client code made available at EPX level, so should work
under Windows as well.
2003-03-20 Berend de Boer <email@example.com>
* Fixed bug in POSIX_EXEC_PROCESS: it opened both a file
descriptor and a stream, but both the stream and descriptor could
be closed, because both were owner. Could lead to weird problems.
2003-03-19 Berend de Boer <firstname.lastname@example.org>
* Detected a glaring error in my postconditions that check
resource accounting. They do not work when garbage collecting is
enabled. A sweep can actually decrease the number of open
resources, the behaviour is actually unpredictable. New routines
test if the gc is enabled or not, before testing the
postcondition. This affected STDC_BUFFER and STDC_FILE.
2003-03-18 Berend de Boer <email@example.com>
* ABSTRACT_DIRECTORY.forth_recursive did not ensure its
postcondition in certain situations.
2003-03-17 Berend de Boer <firstname.lastname@example.org>
* Added routines set_blocking_io and supports_nonblocking_io to ABSTRACT_FILE_DESCRIPTOR.
2003-03-11 Berend de Boer <email@example.com>
* Windows support for TCP sockets, client/server, finished. UDP
* SUS_SOCKET_ADDRESS is now obsolete. Use EPX_HOST_PORT instead.
2003-03-07 Berend de Boer <firstname.lastname@example.org>
* Started to add Windows TCP/IP support.
2003-02-24 Berend de Boer <email@example.com>
* ABSTRACT_FILE_DESCRIPTOR now inherits from
KI_CHARACTER_INPUT_STREAM. This should make a file descriptor
plug-compatible with Gobo. STDC_FILE will follow.
2003-02-20 Berend de Boer <firstname.lastname@example.org>
* EPX_EXTENSION_FILTER inherited from EPX_CURRENT_PROCESS. No idea
* STDC_PATH.is_equal implementation seems to be wrong, at least
for ISE 5.2 on Windows. I now make sure I just compare real STRINGS.
2003-02-14 Berend de Boer <email@example.com>
* Unix domain sockets work, see SUS_UNIX_SERVER_SOCKET and
* Added SUS_IP6_ADDRESS, IPv6 should be fully supported now.
2003-02-13 Berend de Boer <firstname.lastname@example.org>
* Added file_content_as_string method in ABSTRACT_FILE_SYSTEM: given a
file name, returns its contents as a STRING.
2003-02-11 Berend de Boer <email@example.com>
* license changed to Eiffel Forum Version 2, see
forum.txt. License is now FSF (GPL) and OSI (Open Software Initiative) compatible.
2003-02-10 Berend de Boer <firstname.lastname@example.org>
* Renamed EPX_SINGLETON.the_singleton to just singleton.
2003-02-08 Berend de Boer <email@example.com>
* Added shutdown functions to SUS_TCP_SOCKET.
* Added local_address and remote_adddress features to
* Marcio Marchini reported a problem with the latest
lcc. Apparantly it does not have PWIN32_FIND_DATA. Fixed this in
w_windows.h and w_windows.c with replacing it by PWIN32_FIND_DATAA.
2003-02-07 Berend de Boer <firstname.lastname@example.org>
* WINDOWS_CHILD_PROCESS.is_pid_valid was incorrect, removed.
* Added EPX_POINTER_HELPER.posix_pointer_to_integer to convert a
pointer to an integer. Couldn't find a portable solution for this.
* EPX_POINTER_HELPER.posix_pointer_add made obsolete as every
POINTER class now supports the "+" operator.
* EPX_POINTER_ADD is renamed to EPX_POINTER_HELPER. Previous class
2003-02-06 Berend de Boer <email@example.com>
* Added SUS_TCP_SERVER_SOCKET for server side of tcp
connections. Using `listen_by_address' and `accept', server side
sockets are now working.
* SUS_TCP_SOCKET has been rewritten, use SUS_TCP_CLIENT_SOCKET
now. This breaks existing code, sorry.
* Verified that UDP works. Just create a SUS_SERVICE with protocol
"udp" and you're fine. There is an SUS_UDP_CLIENT SOCKET, but
currently it does not differ from SUS_TCP_CLIENT_SOCKET.
* It is believed that the issues regarding a moving garbage
collector with ISE Eiffel are now solved. Would like to get the
comments of real experts on my trick though. Thanx to Andreas
Leiter who `invented' it, he saw Eric Bezault doing something in
XM_EXPAT_API that lead him to the idea now implemented in eposix.
2003-02-05 Berend de Boer <firstname.lastname@example.org>
* ABSTRACT_FILE_DESCRIPTOR.attach_to_fd now has a second
parameter. This breaks existing code, sorry.
* ABSTRACT_FILE_DESCRIPTOR.close is now slightly stricter: it must
actually be the owner, before it closes the file.
* ABSTRACT_FILE_DESCRIPTOR now inherits from STDC_HANDLE as
well. I'm well on my way to have all handle based stuff inherit
from STDC_HANDLE, should make resource management and resource
control very robust.
* ABSTRACT_FILE_DESCRIPTOR.read_loop_disabled removed. I didn't
seem to use it after I had a real read_string in this class and it
requires a potentially expensive status call to disable it in many
* EPX_STRING_HELPER.make_with_capacity has been made
obsolete. STRING.make is now portable.
Live long and prosper,
Berend de Boer
(PGP public key: http://www.pobox.com/~berend/berend-public-key.txt)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>
-----END PGP SIGNATURE-----