Solid File System™ (SolFS) and Palm-specific data storage methods
The Default
If you develop applications for PalmOS®, you are aware about the ways PalmOS stores data. There are two ways of them available: via Database API and via File Streaming API.
Databases are the native way to keep information on Palm devices. The database on PalmOS is a set of memory blocks, each having an ID. The databases have certain limitations of the block size and are not very handy to use when you attempt to store files in database records.
File Streaming API, similar to standard C++ and Unix file APIs, was added to simplify the task of storing files on PalmOS. In fact, it also stores data in database records, but let the developer use common API. While this API offers some basic functionality, it is extremely limited. It has no directory support, no file enumeration, each file is stored in it's own database etc.. Below you wll find a comparison chart, which shows the limitations of default PalmOS file management.
The Alternative
Solid File System is a library, which provides a full-featured file system on top of PalmOS data storage capabilities. You get transparent encryption and compression, directory management, file enumeration. Solid File System supports journalling, multiple streams per file, large stream and file size, file and storage metadata, symbolic links.With Solid File System you use the API set, similar to Windows API. You don't need to learn new API to use SolFS functions.
One of the most important SolFS benefits is that all your information is stored in a single file. This makes maintenance and management of information much easier.
Face to Face
| Feature | Solid File System (SolFS™) | Database API | File Streaming API |
| Supported platforms | Windows, .NET, Unix, Windows CE, PalmOS, other | PalmOS1 | PalmOS1 |
| File name length | Unlimited | 32 bytes | 32 bytes |
| File name character set | Unicode | ANSI | ANSI |
| File name case sensitivity | Optional | Sensitive | Sensitive |
| Maximum stream/file size | ((2^32)-1) * (2^15) / 2 bytes, i.e. ~128 Tb2 | 2^32 bytes | 2^32 bytes |
| Maximum storage size | ((2^32)-1) * (2^15) bytes, i.e. ~256 Tb2 | Limited by underlying hardware | Limited by underlying hardware |
| Directory hierarchies | Supported | - | - |
| File search and enumeration3 | Complete | Limited | Limited, via Database API |
| Feature | Solid File System (SolFS™) | Database API | File Streaming API |
| Multiple streams per file | Supported | - | - |
| Symbolic links | Supported | - | - |
| Stream Metadata | Supported | Limited | Limited |
| Storage metadata | Supported | - | - |
| Feature | Solid File System (SolFS™) | Database API | File Streaming API |
| Encryption | Per-stream, whole-storage | - | - |
| Encryption algorithm | AES 256 + SHA 256 (HMAC) Custom algorithms supported |
- | - |
| Data integrity | Journalling for both stream and file system integrity Self-checking and repair operations |
- | - |
| File Compression | Per-stream ZLib | - | - |
| Feature | Solid File System (SolFS™) | Database API | File Streaming API |
1 PalmOS databases, when transferred to other systems, can be manipulated using third-party libraries.
2 By default, SolFS library writes data to one PalmOS database and it's max.size is limited to the maximum possible size of a single database (which is 2^32 bytes). In callback mode you can utilize other mechanisms for backend media and so the limitations will be removed.
3 SolFS enumeration offers search by mask and by attributes. PalmOS databases can be only enumerated by type and creator.

