From ad7b5d2cd86c28a1e6ff73e27339a45e98f4a1df Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Tue, 24 May 2022 19:13:58 +0100 Subject: [PATCH] Change packed image --- docs/README.md | 55 +++++++++++++++++++++-------------------- docs/images/packed.png | Bin 24942 -> 0 bytes docs/images/packed.svg | 1 + 3 files changed, 29 insertions(+), 27 deletions(-) delete mode 100644 docs/images/packed.png create mode 100644 docs/images/packed.svg diff --git a/docs/README.md b/docs/README.md index bba22335..1b46bffd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3531,36 +3531,37 @@ mg_http_serve_dir(c, hm, &opts); ### Packed filesystem -Packed filesystem allow to "pack" filesystem into single file, for example, into -executable or flashable image. This is useful, for example, for implementation of HTTP-server on devices without filesystem. +Mongoose +has a filesystem abstraction layer. By default, a POSIX filesystem, +a FatFS filesystem, and a "packed" filesystem are implemented. + +A packed filesystem allow to "pack" filesystem into single file, for example, +into executable or flashable image - and files will be hardcoded into the +binary, making it possible to e.g. serve files on devices with no +filesystem, or be resilient to filesystem issues: + +packed filesystem In order to use packed filesystem do the following: -1. Compile file test\pack.c: - ```sh - $ cc -o pack pack.c - ``` - -2. Convert list of files into single .c: - ```sh - $ ./pack file1.data file2.data > fs.c - ``` - -3. Build your app with fs.c: - ```sh - $ cc -o my_app my_app.c fs.c - ``` - -4. In your application code, you can access files using this function:
- `const char *mg_unpack(const char *file_name, size_t *size)` or app can also - force `mg_http_serve_dir` function to use packed file system: - -```c -struct mg_http_serve_opts opts; -opts.fs = &mg_fs_packed; // Set packed ds as a file system -mg_http_serve_dir(c, hm, &opts); +```sh +$ cc -o pack pack.c # The pack.c file is test/ repo directory ``` - +2. Convert list of files into single .c: +```sh +$ ./pack index.html style.css > packed_fs.c +``` + +3. Build your app with `packed_fs.c`: +```sh +$ cc mongoose.c app.c packed_fs.c -DMG_ENABLE_PACKED_FS=1 +``` + +4. In your application code: +```c +struct mg_http_serve_opts opts = {}; // Initialise empty options +opts.fs = &mg_fs_packed; // Use packed filesystem +mg_http_serve_dir(c, hm, &opts); // Serve directory +``` - diff --git a/docs/images/packed.png b/docs/images/packed.png deleted file mode 100644 index a2ae271fe78ac64c763ee9fa28e54003b6d6676c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24942 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 diff --git a/docs/images/packed.svg b/docs/images/packed.svg new file mode 100644 index 00000000..12ab3ab1 --- /dev/null +++ b/docs/images/packed.svg @@ -0,0 +1 @@ +PACKBUILDAppfilex.ymain.jsstyle.cssintex.htmlintex.htmlmain.jspacked_fc.cmg-unpack() - get file datamg-unlist() - get file list \ No newline at end of file