Commit Graph

207 Commits

Author SHA1 Message Date
Vreixo Formoso 9e9c077c6e Minimize charset conversion errors, ignoring when we can't do better.
If a file name is encoded in a different encoding than default input, current
implementation make image generation to be cancelled. As this can happen quite
frequent, due to files from discs or Windows partitions incorrectly mounted,
the best we can do is just ignore this, replacing the wrong character with a
'_'.
2007-12-22 19:44:02 +01:00
Vreixo Formoso de3c4e4962 Little demo program to test image generation. 2007-12-22 17:09:49 +01:00
Vreixo Formoso 35ef22cdd7 Implement ECMA-119 burn_source and writer thread handling.
At this time, nglibisofs is able to output an image!! Note that communication
between writer and read thread is done via a pipe. That will be replaced by a
ring buffer in the near future.
2007-12-22 17:09:28 +01:00
Vreixo Formoso 2ab23693db Replace path table size computation by a recursive version.
The recursive version wastes less memory, as it doesn't need the path table
array.
2007-12-22 16:02:29 +01:00
Vreixo Formoso d07fed1a4c Add write function. Fix bug in PVD writing and dir. record len computation. 2007-12-22 14:45:00 +01:00
Vreixo Formoso 42731f4135 Fix bug in create tree, to propertly handle ignored files.
Due to a bug, when a file was ignored (for example, a dir whose deep 
level was greater than 8), all its parents where ignored, what causes 
root to be ignored!
2007-12-22 14:32:31 +01:00
Vreixo Formoso 5cf2980c9c Append version number to file ids. 2007-12-21 23:08:21 +01:00
Vreixo Formoso 2fd3195747 Write the path tables on the ISO structure. 2007-12-21 22:53:48 +01:00
Vreixo Formoso 31ee89c47b Code to write directory structure of the ECMA-119 tree. 2007-12-21 00:35:43 +01:00
Vreixo Formoso 46ffb6d33d Fix implementation of PVD writing. 2007-12-21 00:05:41 +01:00
Vreixo Formoso 2f383215ff Implement Writer for file contents.
Some aspects, such as better reporting of file bigger or smaller than 
expected is needed, but all situations are handled propertly.
2007-12-20 22:17:18 +01:00
Vreixo Formoso 449ed65fe9 Improve IsoStream interface implementation. 2007-12-20 20:58:03 +01:00
Vreixo Formoso a161f4249c Improve IsoFileSource interface implementation. 2007-12-20 20:47:39 +01:00
Vreixo Formoso f2e3a2c9fc Guard against empty names. 2007-12-20 16:09:29 +01:00
Vreixo Formoso e6bd1586d6 Replace glibc tsearch() with a custom red-black tree implementation.
The library supplied tree estructure is not enought for our needs, due to its
limited API. Thus, we have implemented a suitable red-black tree.
2007-12-20 00:25:25 +01:00
Vreixo Formoso 5eb3a7e038 Implementation of function to write the PVD.
The directory entry for the root directory is still missing.
2007-12-18 21:55:01 +01:00
Vreixo Formoso 2dc15ab164 Add some util functions, mostly copied from old libisofs. 2007-12-18 21:51:33 +01:00
Vreixo Formoso 39bde82ff6 Move size, ino, dev cache from IsoFileSrc to IsoStream.
That is a better decission, as it reduces the number of stat() call 
needed, and anyway some Streams will need the size.
2007-12-18 20:46:28 +01:00
Vreixo Formoso 5b93cb4cdc Fix bug, root refcount must be initialized to 1. 2007-12-18 10:54:09 +01:00
Vreixo Formoso 36894d6a23 Implementation of the write function to use by the Writers. 2007-12-18 00:37:24 +01:00
Vreixo Formoso 257b08bfcf Code to compute position of directory records and path tables. 2007-12-18 00:20:03 +01:00
Vreixo Formoso 5e2de57aa9 Initial structure for ECMA-119 writer. 2007-12-17 23:22:19 +01:00
Vreixo Formoso 159b775d22 Improve message functions to support message formating in printf style. 2007-12-17 21:12:51 +01:00
Vreixo Formoso f279676b6b Check file size to ensure file bigger than 4GB are not added to image. 2007-12-17 20:47:53 +01:00
Vreixo Formoso c8715941e6 Define some functions and responsabilities for image generation.
Still very preliminary work.
2007-12-16 19:10:47 +01:00
Vreixo Formoso c03d4d9b33 Implementation of name mangling algorithm.
This has to ensure that file names are unique among all files in an iso 
directory. Current implementation can be improved by using a hash table 
to keep the names, instead of iterate over all children. An alternative 
method, keeping children sorted all the time, thus allowing binary 
search, has been considered but discarded.                          

Current implementation support up to 9,999,999 equal files per 
directory.
2007-12-16 17:32:05 +01:00
Vreixo Formoso 56cdd00638 Sorting of nodes in a dir acording to ECMA-119, 9.3. 2007-12-15 18:40:33 +01:00
Vreixo Formoso 411524c330 Handling of iso directory depth restrictions on tree creation time.
Note that this doesn't involve the RR reparent. It just ignore the files 
that break iso restrictions (see ECMA-119, 6.8.2.1).
2007-12-15 18:29:40 +01:00
Vreixo Formoso 0a340c53d5 Fix bug in open() function for local file srcs, to deal with symlinks. 2007-12-15 17:12:21 +01:00
Vreixo Formoso 40b27dbacc Initial support for low level ECMA-119 tree.
This only adds the tree creation functions, no sorting and name mangling 
yet. Only plain ECMA-119 supported for now, nor RR, relaxed 
restrictions, etc..

This also adds a little test program.
2007-12-15 16:55:44 +01:00
Vreixo Formoso aa312cf7d7 Fix bug in IsoFileSrc implementation, related to a wrogn usage of tsearch.
It happens that tsearch seems to not return a pointer to the inserted element,
but a pointer to a pointer to the inserted element (that makes sense, as we
are inserted pointers...). This bug, thus, was related to a wrong 
understanding of the tsearch API!
2007-12-15 16:48:50 +01:00
Vreixo Formoso 7b241176fb Init implementation of IsoFileSrc.
Ecma119Image, defined for first time in this commit, is the context for image 
written. It keeps the low level objects needed during image written.

IsoFileSrc is the low level object that takes care about the info needed to
write file contents to image. It takes care about reading from Stream in 2K
block chunks. To prevent the same file be written twice to image, we keep in
Ecma119Image a search tree, indexed by the triple key (fs, device, inode) that
uniquelly identifies a source.
2007-12-15 13:13:49 +01:00
Vreixo Formoso dd83f85d09 Support for identification of source Streams.
We identify uniquelly a given source Stream by a triple of numbers: the
filesystem id, the device id inside the filesystem, and the inode id.
2007-12-15 12:51:48 +01:00
Vreixo Formoso 8f7222609e Add support for generating ISO identifiers from ASCII strings. 2007-12-14 22:13:00 +01:00
Vreixo Formoso 315f1a1717 Support for charset conversion from any encoding to ASCII. 2007-12-14 21:42:55 +01:00
Vreixo Formoso 115da82c9e First util functions, with corresponding unit test. 2007-12-13 21:02:36 +01:00
Vreixo Formoso 60d68df84c Expose iso_node_set_hidden(), to let a node be hidden in RR/ISO or Joliet tree. 2007-12-13 20:27:58 +01:00
Vreixo Formoso d10ed353e2 Implement function to recursively add a dir to an iso tree.
This commit also to the following changes:
- create_node() on builder never frees the IsoFileSource, it is responsability 
  of the caller to free it.
- Recursive addition options added to IsoImage (not exposed to public API yet)
- create_node() takes care about follow_symlinks
- Added little demo program to test it.
2007-12-11 22:47:04 +01:00
Vreixo Formoso 0306bb5daf Redefine readdir() on IsoFileSource, to skip "." and ".." dirs. 2007-12-11 22:41:18 +01:00
Vreixo Formoso 008871cfd8 Additon of nodes based on Builder. Pass Image as a parameter to builder methods. 2007-12-09 18:47:29 +01:00
Vreixo Formoso e28f924913 Ensure local filesystem is deleted when needed. 2007-12-08 02:49:27 +01:00
Vreixo Formoso b03fbf0ee0 Implement function to get node from path on image. Little unit test too. 2007-12-08 01:39:31 +01:00
Vreixo Formoso f04ddb4435 Add getter and setter for sort_weight. 2007-12-07 22:36:26 +01:00
Vreixo Formoso 70b9b87150 Expose iso_node_get_type(). 2007-12-07 22:25:31 +01:00
Vreixo Formoso 27670f8d3a More tests related with iso tree. 2007-12-07 22:20:14 +01:00
Vreixo Formoso 7d417e9fa6 Added a mocked filesystem to simulate a real filesystem in tests. 2007-12-07 17:29:27 +01:00
Vreixo Formoso 45f4d0a29e Add function to add an exiting file to the iso tree.
Node is created using a builder. Default builder and filesystem is added 
to IsoImage. Later we should expose setters for this atts.
2007-12-07 03:02:46 +01:00
Vreixo Formoso c93fa154d5 Getters and setters for time attributes on IsoNode. 2007-12-06 22:52:01 +01:00
Vreixo Formoso 7f9c5c9065 Unit test for tree functions. Little fixes. 2007-12-06 22:45:16 +01:00
Vreixo Formoso 5df6b2c3d2 Fix bug in tree functions. 2007-12-06 16:44:52 +01:00