diff options
| author | Damien George <damien@micropython.org> | 2021-07-09 12:38:25 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2021-07-12 17:07:36 +1000 |
| commit | 4d546713ec8858cbf908de45de11cbfc46a20971 (patch) | |
| tree | fda10704c197bf3500f09297d29239c15f878fab /lib/memzip | |
| parent | 925878b2f83e09987bd1688746b92898ee8bbcac (diff) | |
shared: Introduce new top-level dir and move 1st party lib code there.
This commit moves all first-party code developed for this project from lib/
to shared/, so that lib/ now only contains third-party code.
The following directories are moved as-is from lib to shared:
lib/libc -> shared/libc
lib/memzip -> shared/memzip
lib/netutils -> shared/netutils
lib/timeutils -> shared/timeutils
lib/upytesthelper -> shared/upytesthelper
All files in lib/embed/ have been moved to shared/libc/.
lib/mp-readline has been moved to shared/readline.
lib/utils has been moved to shared/runtime, with the exception of
lib/utils/printf.c which has been moved to shared/libc/printf.c.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'lib/memzip')
| -rw-r--r-- | lib/memzip/README.md | 28 | ||||
| -rw-r--r-- | lib/memzip/import.c | 17 | ||||
| -rw-r--r-- | lib/memzip/lexermemzip.c | 19 | ||||
| -rwxr-xr-x | lib/memzip/make-memzip.py | 79 | ||||
| -rw-r--r-- | lib/memzip/memzip.c | 106 | ||||
| -rw-r--r-- | lib/memzip/memzip.h | 83 |
6 files changed, 0 insertions, 332 deletions
diff --git a/lib/memzip/README.md b/lib/memzip/README.md deleted file mode 100644 index 287d0fc48..000000000 --- a/lib/memzip/README.md +++ /dev/null @@ -1,28 +0,0 @@ -MEMZIP - a simple readonly file system - -memzip takes a zip file which is comprised of uncompressed files and -and presents it as a filesystem, allowing Python files to be imported. - -The script make-memzip.py takes a directory name and will create a zip file -containing uncompressed files found in the directory. It will then generate -a C file which contains the data from the zip file. - -A typical addition to a makefile would look like: -``` -SRC_C += \ - lib/memzip/import.c \ - lib/memzip/lexermemzip.c \ - lib/memzip/memzip.c \ - -OBJ += $(BUILD)/memzip-files.o - -MAKE_MEMZIP = ../lib/memzip/make-memzip.py - -$(BUILD)/memzip-files.o: $(BUILD)/memzip-files.c - $(call compile_c) - -$(BUILD)/memzip-files.c: $(shell find ${MEMZIP_DIR} -type f) - @$(ECHO) "Creating $@" - $(Q)$(PYTHON) $(MAKE_MEMZIP) --zip-file $(BUILD)/memzip-files.zip --c-file $@ $(MEMZIP_DIR) -``` - diff --git a/lib/memzip/import.c b/lib/memzip/import.c deleted file mode 100644 index 2d5225b88..000000000 --- a/lib/memzip/import.c +++ /dev/null @@ -1,17 +0,0 @@ -#include <stdio.h> - -#include "py/lexer.h" -#include "memzip.h" - -mp_import_stat_t mp_import_stat(const char *path) { - MEMZIP_FILE_INFO info; - - if (memzip_stat(path, &info) != MZ_OK) { - return MP_IMPORT_STAT_NO_EXIST; - } - - if (info.is_dir) { - return MP_IMPORT_STAT_DIR; - } - return MP_IMPORT_STAT_FILE; -} diff --git a/lib/memzip/lexermemzip.c b/lib/memzip/lexermemzip.c deleted file mode 100644 index 6b26961bd..000000000 --- a/lib/memzip/lexermemzip.c +++ /dev/null @@ -1,19 +0,0 @@ -#include <stdlib.h> - -#include "py/lexer.h" -#include "py/runtime.h" -#include "py/mperrno.h" -#include "memzip.h" - -mp_lexer_t *mp_lexer_new_from_file(const char *filename) -{ - void *data; - size_t len; - - if (memzip_locate(filename, &data, &len) != MZ_OK) { - mp_raise_OSError(MP_ENOENT); - } - - return mp_lexer_new_from_str_len(qstr_from_str(filename), (const char *)data, (mp_uint_t)len, 0); -} - diff --git a/lib/memzip/make-memzip.py b/lib/memzip/make-memzip.py deleted file mode 100755 index 9730f5e00..000000000 --- a/lib/memzip/make-memzip.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python -# -# Takes a directory of files and zips them up (as uncompressed files). -# This then gets converted into a C data structure which can be read -# like a filesystem at runtime. -# -# This is somewhat like frozen modules in python, but allows arbitrary files -# to be used. - -from __future__ import print_function - -import argparse -import os -import subprocess -import sys -import types - -def create_zip(zip_filename, zip_dir): - abs_zip_filename = os.path.abspath(zip_filename) - save_cwd = os.getcwd() - os.chdir(zip_dir) - if os.path.exists(abs_zip_filename): - os.remove(abs_zip_filename) - subprocess.check_call(['zip', '-0', '-r', '-D', abs_zip_filename, '.']) - os.chdir(save_cwd) - -def create_c_from_file(c_filename, zip_filename): - with open(zip_filename, 'rb') as zip_file: - with open(c_filename, 'wb') as c_file: - print('#include <stdint.h>', file=c_file) - print('', file=c_file) - print('const uint8_t memzip_data[] = {', file=c_file) - while True: - buf = zip_file.read(16) - if not buf: - break - print(' ', end='', file=c_file) - for byte in buf: - if type(byte) is types.StringType: - print(' 0x{:02x},'.format(ord(byte)), end='', file=c_file) - else: - print(' 0x{:02x},'.format(byte), end='', file=c_file) - print('', file=c_file) - print('};', file=c_file) - -def main(): - parser = argparse.ArgumentParser( - prog='make-memzip.py', - usage='%(prog)s [options] [command]', - description='Generates a C source memzip file.' - ) - parser.add_argument( - '-z', '--zip-file', - dest='zip_filename', - help='Specifies the name of the created zip file.', - default='memzip_files.zip' - ) - parser.add_argument( - '-c', '--c-file', - dest='c_filename', - help='Specifies the name of the created C source file.', - default='memzip_files.c' - ) - parser.add_argument( - dest='source_dir', - default='memzip_files' - ) - args = parser.parse_args(sys.argv[1:]) - - print('args.zip_filename =', args.zip_filename) - print('args.c_filename =', args.c_filename) - print('args.source_dir =', args.source_dir) - - create_zip(args.zip_filename, args.source_dir) - create_c_from_file(args.c_filename, args.zip_filename) - -if __name__ == "__main__": - main() - diff --git a/lib/memzip/memzip.c b/lib/memzip/memzip.c deleted file mode 100644 index 3fbea8e1e..000000000 --- a/lib/memzip/memzip.c +++ /dev/null @@ -1,106 +0,0 @@ -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include "py/mpconfig.h" -#include "py/misc.h" -#include "memzip.h" - -extern uint8_t memzip_data[]; - -const MEMZIP_FILE_HDR *memzip_find_file_header(const char *filename) { - - const MEMZIP_FILE_HDR *file_hdr = (const MEMZIP_FILE_HDR *)memzip_data; - uint8_t *mem_data; - - /* Zip file filenames don't have a leading /, so we strip it off */ - - if (*filename == '/') { - filename++; - } - while (file_hdr->signature == MEMZIP_FILE_HEADER_SIGNATURE) { - const char *file_hdr_filename = (const char *)&file_hdr[1]; - mem_data = (uint8_t *)file_hdr_filename; - mem_data += file_hdr->filename_len; - mem_data += file_hdr->extra_len; - if (!strncmp(file_hdr_filename, filename, file_hdr->filename_len)) { - /* We found a match */ - return file_hdr; - } - mem_data += file_hdr->uncompressed_size; - file_hdr = (const MEMZIP_FILE_HDR *)mem_data; - } - return NULL; -} - -bool memzip_is_dir(const char *filename) { - const MEMZIP_FILE_HDR *file_hdr = (const MEMZIP_FILE_HDR *)memzip_data; - uint8_t *mem_data; - - if (strcmp(filename, "/") == 0) { - // The root directory is a directory. - return true; - } - - // Zip filenames don't have a leading /, so we strip it off - if (*filename == '/') { - filename++; - } - size_t filename_len = strlen(filename); - - while (file_hdr->signature == MEMZIP_FILE_HEADER_SIGNATURE) { - const char *file_hdr_filename = (const char *)&file_hdr[1]; - if (filename_len < file_hdr->filename_len && - strncmp(file_hdr_filename, filename, filename_len) == 0 && - file_hdr_filename[filename_len] == '/') { - return true; - } - - mem_data = (uint8_t *)file_hdr_filename; - mem_data += file_hdr->filename_len; - mem_data += file_hdr->extra_len; - mem_data += file_hdr->uncompressed_size; - file_hdr = (const MEMZIP_FILE_HDR *)mem_data; - } - return NULL; - -} - -MEMZIP_RESULT memzip_locate(const char *filename, void **data, size_t *len) -{ - const MEMZIP_FILE_HDR *file_hdr = memzip_find_file_header(filename); - if (file_hdr == NULL) { - return MZ_NO_FILE; - } - if (file_hdr->compression_method != 0) { - return MZ_FILE_COMPRESSED; - } - - uint8_t *mem_data; - mem_data = (uint8_t *)&file_hdr[1]; - mem_data += file_hdr->filename_len; - mem_data += file_hdr->extra_len; - - *data = mem_data; - *len = file_hdr->uncompressed_size; - return MZ_OK; -} - -MEMZIP_RESULT memzip_stat(const char *path, MEMZIP_FILE_INFO *info) { - const MEMZIP_FILE_HDR *file_hdr = memzip_find_file_header(path); - if (file_hdr == NULL) { - if (memzip_is_dir(path)) { - info->file_size = 0; - info->last_mod_date = 0; - info->last_mod_time = 0; - info->is_dir = 1; - return MZ_OK; - } - return MZ_NO_FILE; - } - info->file_size = file_hdr->uncompressed_size; - info->last_mod_date = file_hdr->last_mod_date; - info->last_mod_time = file_hdr->last_mod_time; - info->is_dir = 0; - - return MZ_OK; -} diff --git a/lib/memzip/memzip.h b/lib/memzip/memzip.h deleted file mode 100644 index 667e2df7e..000000000 --- a/lib/memzip/memzip.h +++ /dev/null @@ -1,83 +0,0 @@ -#pragma pack(push, 1) - -#define MEMZIP_FILE_HEADER_SIGNATURE 0x04034b50 -typedef struct -{ - uint32_t signature; - uint16_t version; - uint16_t flags; - uint16_t compression_method; - uint16_t last_mod_time; - uint16_t last_mod_date; - uint32_t crc32; - uint32_t compressed_size; - uint32_t uncompressed_size; - uint16_t filename_len; - uint16_t extra_len; - - /* char filename[filename_len] */ - /* uint8_t extra[extra_len] */ - -} MEMZIP_FILE_HDR; - -#define MEMZIP_CENTRAL_DIRECTORY_SIGNATURE 0x02014b50 -typedef struct -{ - uint32_t signature; - uint16_t version_made_by; - uint16_t version_read_with; - uint16_t flags; - uint16_t compression_method; - uint16_t last_mod_time; - uint16_t last_mod_date; - uint32_t crc32; - uint32_t compressed_size; - uint32_t uncompressed_size; - uint16_t filename_len; - uint16_t extra_len; - uint16_t disk_num; - uint16_t internal_file_attributes; - uint32_t external_file_attributes; - uint32_t file_header_offset; - - /* char filename[filename_len] */ - /* uint8_t extra[extra_len] */ - -} MEMZIP_CENTRAL_DIRECTORY_HDR; - -#define MEMZIP_END_OF_CENTRAL_DIRECTORY_SIGNATURE 0x06054b50 -typedef struct -{ - uint32_t signature; - uint16_t disk_num; - uint16_t central_directory_disk; - uint16_t num_central_directories_this_disk; - uint16_t total_central_directories; - uint32_t central_directory_size; - uint32_t central_directory_offset; - uint16_t comment_len; - - /* char comment[comment_len] */ - -} MEMZIP_END_OF_CENTRAL_DIRECTORY; - -#pragma pack(pop) - -typedef enum { - MZ_OK = 0, /* (0) Succeeded */ - MZ_NO_FILE, /* (1) Could not find the file. */ - MZ_FILE_COMPRESSED, /* (2) File is compressed (expecting uncompressed) */ - -} MEMZIP_RESULT; - -typedef struct { - uint32_t file_size; - uint16_t last_mod_date; - uint16_t last_mod_time; - uint8_t is_dir; - -} MEMZIP_FILE_INFO; - -MEMZIP_RESULT memzip_locate(const char *filename, void **data, size_t *len); - -MEMZIP_RESULT memzip_stat(const char *path, MEMZIP_FILE_INFO *info); |
