nlib
nn::nlib::oss 名前空間

オープンソース・ソフトウェア(OSS), OSS派生コード, 及びOSSにアクセスするためのライブラリが実装されています。 [詳解]

クラス

class  Lz4InputStream
 LZ4のフレームフォーマットに従ったデータを読むためのストリームクラスです。 [詳解]
 
class  Lz4InputStreamSettings
 Lz4InputStreamの設定情報の取得と設定を行うクラスです。現在のところこのクラスは空です。 [詳解]
 
class  Lz4OutputStream
 LZ4のフレームフォーマットに従ったデータを書きこむためのストリームクラスです。 [詳解]
 
class  Lz4OutputStreamSettings
 Lz4OutputStreamの設定情報の取得と設定を行うクラスです。 [詳解]
 

関数

errno_t BsDiffZ (OutputStream *patch, void *old_data, size_t old_size, void *new_data, size_t new_size) noexcept
 古いデータから新しいデータにアップデートするためのパッチを作成します。 [詳解]
 
errno_t BsPatchZ (OutputStream *new_stream, void *old_data, size_t old_size, void *patch_data, size_t patch_size) noexcept
 古いデータとパッチデータから新しいデータを作成します。 [詳解]
 

詳解

オープンソース・ソフトウェア(OSS), OSS派生コード, 及びOSSにアクセスするためのライブラリが実装されています。

説明
カテゴリIなのでこのライブラリをご利用の際には必要な手続きにご注意ください。
また、ossライブラリのそれぞれのライブラリに含まれるコードは、いずれも内部でnmalloc/nfreeを利用しているため、heapライブラリをmiscライブラリに加えてリンクする必要があることに注意してください。 nmalloc/nfreeを利用している理由は、SDKデフォルトのmalloc/freeを利用すると、フラグメンテーションの発生を利用したサービス拒否攻撃が可能になる可能性があるからです。

収録されているプログラム

このライブラリには、以下のものが含まれています。

bsdiff

bsdiff(http://www.daemonology.net/bsdiff/)をbzlib2ではなくzlibを使うように改変してライブラリとしたものを収録しています。 また、bsdiff_z.exe,bspatch_z.exeをコマンドラインプログラムとして提供しています。
bsdiffのライセンスにご留意ください。
Copyright 2003-2005 Colin Percival
All rights reserved
Redistribution and use in source and binary forms, with or without
modification, are permitted providing that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

SQLite3

SQLite3(https://www.sqlite.org/)nlibのI/F上で動作するように改変したものを収録しています。
マルチスレッドでの動作に対応していますが、同じデータベースに対して複数スレッドからアクセスすることはできません(ファイルのロックを行わないため)。 デバックビルド版は、SQLITE_DEBUG_OS_TRACEを有効にしてコンパイルされています。 コマンドラインシェルはsqlite3_nlib.exeです。
なお、SQLite3はパブリックドメインです。
コードの改変については、mem1.c, os_win.c, mutex_w32.cに相当する部分がnlibを利用する独自のコードで記述されています。
その他のSQLite3のコンパイル設定は以下のようになっています。
#define SQLITE_OMIT_COMPILEOPTION_DIAGS
#define SQLITE_OMIT_DEPRECATED
#define SQLITE_OMIT_LOAD_EXTENSION
#define SQLITE_OMIT_LOCALTIME
#define SQLITE_OMIT_TCL_VARIABLE
#define SQLITE_OMIT_TRACE
#define SQLITE_OMIT_WAL
#define SQLITE_ENABLE_ATOMIC_WRITE 1
#define SQLITE_ENABLE_COLUMN_METADATA 1
#define SQLITE_ENABLE_EXPENSIVE_ASSERT 1
#define SQLITE_ENABLE_FTS3 1
#define SQLITE_ENABLE_FTS3_PARENTHESIS 1
#define SQLITE_ENABLE_FTS4 1
#define SQLITE_ENABLE_FTS4_UNICODE61 1
#define SQLITE_ENABLE_LOCKING_STYLE 2
#define SQLITE_ENABLE_MEMORY_MANAGEMENT 1
#define SQLITE_ENABLE_OVERSIZE_CELL_CHECK 1
#define SQLITE_ENABLE_RTREE 1
#define SQLITE_ENABLE_STAT3 1
#define SQLITE_ENABLE_TREE_EXPLAIN 1
#define SQLITE_ENABLE_UNLOCK_NOTIFY 1
#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 1

LZ4

高速な圧縮展開アルゴリズムであるLZ4(https://github.com/Cyan4973/lz4)ライブラリを収録しています。 LZ4のコマンドラインプログラムは収録されてません。
LZ4のライセンスにご留意ください。
LZ4 - Fast LZ compression algorithm
Header File
Copyright (C) 2011-2015, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- LZ4 source repository : https://github.com/Cyan4973/lz4
- LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c

関数詳解

nn::nlib::oss::BsDiffZ ( OutputStream patch,
void *  old_data,
size_t  old_size,
void *  new_data,
size_t  new_size 
)
noexcept

古いデータから新しいデータにアップデートするためのパッチを作成します。

引数
[in]patchパッチデータが書き込まれるストリーム
[in]old_data古い(更新対象の)バイナリデータへのポインタ
[in]old_size古いバイナリデータのサイズ
[in]new_data新しいバイナリデータへのポインタ
[in]new_size新しいバイナリデータのサイズ
戻り値
0ならば成功
説明
bsdiff,bspatchはバイナリデータに対するパッチを作成、適用する方法として広く利用されています。 本ライブラリではbsdiff,bspatchをデータ圧縮方法にbzlib2ではなくzlibを利用してライブラリ化しています。
内部でbzlib2ではなくzlibを利用するのでbsdiffで作成されるデータとは異なることに注意してください。 ヘッダのシグニチャはBSDIFF40からbsdiff40に変更されています。 また、コマンドラインプログラムbsdiff_zを使うことでもこの関数を実行することができます。
各種例:
oss/binarypatch/binarypatch.cpp.
nn::nlib::oss::BsPatchZ ( OutputStream new_stream,
void *  old_data,
size_t  old_size,
void *  patch_data,
size_t  patch_size 
)
noexcept

古いデータとパッチデータから新しいデータを作成します。

引数
[in]new_stream新しいデータが書き込まれるストリーム
[in]old_data古い(更新対象の)バイナリデータへのポインタ
[in]old_size古いバイナリデータのサイズ
[in]patch_dataパッチデータへのポインタ
[in]patch_sizeパッチデータのサイズ
戻り値
0ならば成功
説明
BsDiffZ()で作成されたパッチを適用し、古いデータから新しいデータを得ることができます。 また、コマンドラインプログラムbspatch_zを使うことでもこの関数を実行することができます。
各種例:
oss/binarypatch/binarypatch.cpp.