Compare commits

..

3 Commits

Author SHA1 Message Date
7234c22d2f epub fix 2019-10-27 14:00:52 -04:00
bdbd7ca7ed cbz fix 2019-10-27 13:33:55 -04:00
9b7c56a608 Static build (scan only) 2019-10-27 12:25:34 -04:00
20 changed files with 761 additions and 532 deletions

View File

@@ -1,38 +1,74 @@
cmake_minimum_required(VERSION 3.7)
set(CMAKE_C_STANDARD 11)
option(WITH_SIST2 "Build main executable" ON)
option(WITH_SIST2_SCAN "Build scan executable" ON)
project(sist2 C)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules")
add_executable(
sist2
src/main.c
src/sist.h
src/io/walk.h src/io/walk.c
src/parsing/media.h src/parsing/media.c
src/parsing/pdf.h src/parsing/pdf.c
src/io/store.h src/io/store.c
src/tpool.h src/tpool.c
src/parsing/parse.h src/parsing/parse.c
src/io/serialize.h src/io/serialize.c
src/parsing/mime.h src/parsing/mime.c src/parsing/mime_generated.c
src/parsing/text.h src/parsing/text.c
src/index/web.c src/index/web.h
src/web/serve.c src/web/serve.h
src/index/elastic.c src/index/elastic.h
src/util.c src/util.h
src/ctx.h src/types.h src/parsing/font.c src/parsing/font.h
if (WITH_SIST2)
add_executable(
sist2
src/main.c
src/sist.h
src/io/walk.h src/io/walk.c
src/parsing/media.h src/parsing/media.c
src/parsing/pdf.h src/parsing/pdf.c
src/io/store.h src/io/store.c
src/tpool.h src/tpool.c
src/parsing/parse.h src/parsing/parse.c
src/io/serialize.h src/io/serialize.c
src/parsing/mime.h src/parsing/mime.c src/parsing/mime_generated.c
src/parsing/text.h src/parsing/text.c
src/index/web.c src/index/web.h
src/web/serve.c src/web/serve.h
src/index/elastic.c src/index/elastic.h
src/util.c src/util.h
src/ctx.h src/types.h src/parsing/font.c src/parsing/font.h
# argparse
argparse/argparse.h argparse/argparse.c
# argparse
argparse/argparse.h argparse/argparse.c
# cJSON
cJSON/cJSON.h cJSON/cJSON.c
# cJSON
cJSON/cJSON.h cJSON/cJSON.c
# LMDB
lmdb/libraries/liblmdb/lmdb.h lmdb/libraries/liblmdb/mdb.c
lmdb/libraries/liblmdb/midl.h lmdb/libraries/liblmdb/midl.c
src/cli.c src/cli.h)
# LMDB
lmdb/libraries/liblmdb/lmdb.h lmdb/libraries/liblmdb/mdb.c
lmdb/libraries/liblmdb/midl.h lmdb/libraries/liblmdb/midl.c
src/cli.c src/cli.h
)
endif ()
if (WITH_SIST2_SCAN)
add_executable(
sist2_scan
src/main.c
src/sist.h
src/io/walk.h src/io/walk.c
src/parsing/media.h src/parsing/media.c
src/parsing/pdf.h src/parsing/pdf.c
src/io/store.h src/io/store.c
src/tpool.h src/tpool.c
src/parsing/parse.h src/parsing/parse.c
src/io/serialize.h src/io/serialize.c
src/parsing/mime.h src/parsing/mime.c src/parsing/mime_generated.c
src/parsing/text.h src/parsing/text.c
src/util.c src/util.h
src/ctx.h src/types.h src/parsing/font.c src/parsing/font.h
# argparse
argparse/argparse.h argparse/argparse.c
# cJSON
cJSON/cJSON.h cJSON/cJSON.c
# LMDB
lmdb/libraries/liblmdb/lmdb.h lmdb/libraries/liblmdb/mdb.c
lmdb/libraries/liblmdb/midl.h lmdb/libraries/liblmdb/midl.c
src/cli.c src/cli.h
)
endif ()
find_package(PkgConfig REQUIRED)
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig/")
@@ -46,82 +82,149 @@ pkg_check_modules(GLIB REQUIRED glib-2.0)
pkg_check_modules(GOBJECT REQUIRED gobject-2.0)
pkg_check_modules(UUID REQUIRED uuid)
include_directories(${LIBMAGIC_INCLUDE_DIRS})
link_directories(${LIBMAGIC_LIBRARY_DIRS})
add_definitions(${LIBMAGIC_CFLAGS_OTHER})
link_directories(${UUID_LIBRARY_DIRS})
include_directories(${UUID_INCLUDE_DIRS})
add_definitions(${UUID_CFLAGS_OTHER})
include_directories(${GLIB_INCLUDE_DIRS})
link_directories(${GLIB_LIBRARY_DIRS})
add_definitions(${GLIB_CFLAGS_OTHER})
include_directories(${GOBJECT_INCLUDE_DIRS})
link_directories(${GOBJECT_LIBRARY_DIRS})
add_definitions(${GOBJECT_CFLAGS_OTHER})
link_directories(${FFMPEG_LIBRARY_DIRS})
include_directories(${FFMPEG_INCLUDE_DIRS})
include_directories(${OPENSSL_INCLUDE_DIR})
link_directories(${OPENSSL_CRYPTO_LIBRARY})
add_definitions(${FREETYPE_CFLAGS_OTHER})
list(REMOVE_ITEM GLIB_LIBRARIES pcre)
list(REMOVE_ITEM GOBJECT_LIBRARIES pcre)
list(REMOVE_ITEM UUID_LIBRARIES pcre)
include_directories(${FREETYPE_INCLUDE_DIRS})
add_definitions(${FREETYPE_CFLAGS_OTHER})
if (WITH_SIST2)
target_include_directories(
sist2 PUBLIC
${LIBMAGIC_INCLUDE_DIRS}
${GOBJECT_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
${FFMPEG_INCLUDE_DIRS}
${GLIB_INCLUDE_DIRS}
${FREETYPE_INCLUDE_DIRS}
${UUID_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/
${PROJECT_SOURCE_DIR}/lmdb/libraries/liblmdb/
${PROJECT_SOURCE_DIR}/lib/onion/src/
${PROJECT_SOURCE_DIR}/lib/mupdf/include/
)
target_link_directories(
sist2 PUBLIC
${UUID_LIBRARY_DIRS}
${FFMPEG_LIBRARY_DIRS}
)
include_directories(
${PROJECT_SOURCE_DIR}/
${PROJECT_SOURCE_DIR}/lmdb/libraries/liblmdb/
${PROJECT_SOURCE_DIR}/lib/onion/src/
${PROJECT_SOURCE_DIR}/lib/mupdf/include/
)
target_compile_options(sist2
PRIVATE
-O3
# -march=native
-fno-stack-protector
-fomit-frame-pointer
)
target_compile_options(sist2
PRIVATE
-O3
# -march=native
-fno-stack-protector
-fomit-frame-pointer
)
TARGET_LINK_LIBRARIES(
sist2
TARGET_LINK_LIBRARIES(
sist2
${GLIB_LIBRARIES}
${GOBJECT_LIBRARIES}
${UUID_LIBRARIES}
${GLIB_LIBRARIES}
${GOBJECT_LIBRARIES}
${UUID_LIBRARIES}
# ffmpeg
${PROJECT_SOURCE_DIR}/lib/libavcodec.a
${PROJECT_SOURCE_DIR}/lib/libavformat.a
${PROJECT_SOURCE_DIR}/lib/libavutil.a
${PROJECT_SOURCE_DIR}/lib/libswscale.a
${PROJECT_SOURCE_DIR}/lib/libswresample.a
# ${FFMPEG_LIBRARIES}
# swscale
# ffmpeg
${PROJECT_SOURCE_DIR}/lib/libavcodec.a
${PROJECT_SOURCE_DIR}/lib/libavformat.a
${PROJECT_SOURCE_DIR}/lib/libavutil.a
${PROJECT_SOURCE_DIR}/lib/libswscale.a
${PROJECT_SOURCE_DIR}/lib/libswresample.a
# ${FFMPEG_LIBRARIES}
# swscale
# mupdf
${PROJECT_SOURCE_DIR}/lib/libmupdf.a
${PROJECT_SOURCE_DIR}/lib/libmupdf-third.a
# mupdf
${PROJECT_SOURCE_DIR}/lib/libmupdf.a
${PROJECT_SOURCE_DIR}/lib/libmupdf-third.a
# onion
${PROJECT_SOURCE_DIR}/lib/libonion_static.a
# onion
${PROJECT_SOURCE_DIR}/lib/libonion_static.a
pthread
curl
m
bz2
magic
)
pthread
curl
m
bz2
magic
)
endif ()
if (WITH_SIST2_SCAN)
set_target_properties(
sist2_scan
PROPERTIES COMPILE_DEFINITIONS SIST_SCAN_ONLY
)
set_target_properties(
sist2_scan
PROPERTIES
COMPILE_DEFINITIONS SIST_SCAN_ONLY
LINK_FLAGS -static
)
target_include_directories(
sist2_scan PUBLIC
${LIBMAGIC_INCLUDE_DIRS}
${GOBJECT_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
${FFMPEG_INCLUDE_DIRS}
${GLIB_INCLUDE_DIRS}
${UUID_INCLUDE_DIRS}
${FREETYPE_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/
${PROJECT_SOURCE_DIR}/lmdb/libraries/liblmdb/
${PROJECT_SOURCE_DIR}/lib/onion/src/
${PROJECT_SOURCE_DIR}/lib/mupdf/include/
)
target_link_directories(
sist2_scan PUBLIC
${UUID_LIBRARY_DIRS}
${FFMPEG_LIBRARY_DIRS}
)
target_compile_options(sist2_scan
PRIVATE
-O3
# -march=native
-fno-stack-protector
-fomit-frame-pointer
)
TARGET_LINK_LIBRARIES(
sist2_scan
${GLIB_LIBRARIES}
${GOBJECT_LIBRARIES}
${UUID_LIBRARIES}
# ffmpeg
${PROJECT_SOURCE_DIR}/lib/libavcodec.a
${PROJECT_SOURCE_DIR}/lib/libavformat.a
${PROJECT_SOURCE_DIR}/lib/libavutil.a
${PROJECT_SOURCE_DIR}/lib/libswscale.a
${PROJECT_SOURCE_DIR}/lib/libswresample.a
# mupdf
${PROJECT_SOURCE_DIR}/lib/libmupdf.a
${PROJECT_SOURCE_DIR}/lib/libmupdf-third.a
${PROJECT_SOURCE_DIR}/lib/libbz2.a
${PROJECT_SOURCE_DIR}/lib/libmagic.a
pthread
m
)
endif ()
add_custom_target(
before_sist2
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/before_build.sh
)
add_dependencies(sist2 before_sist2)
IF (WITH_SIST2)
add_dependencies(sist2 before_sist2)
else ()
add_dependencies(sist2_scan before_sist2)
endif ()

View File

@@ -80,7 +80,12 @@ binaries.
libssl-dev uuid-dev libavformat-dev libswscale-dev \
python3 libmagic-dev libfreetype6-dev libcurl-dev \
libbz2-dev yasm
```
*(FreeBSD)*
```bash
pkg install cmake gcc yasm gmake bash ffmpeg e2fsprogs-uuid
```
__
2. Build
```bash
git clone --recurse-submodules https://github.com/simon987/sist2

View File

@@ -356,4 +356,6 @@ text/x-vcard, vcf
application/x-innosetup,
application/winhelp, hlp
image/x-tga,
application/x-wine-extension-ini,
application/x-wine-extension-ini,
application/x-cbz, cbz
application/x-cbr, cbr
1 application/arj arj
356 application/x-innosetup
357 application/winhelp hlp
358 image/x-tga
359 application/x-wine-extension-ini
360 application/x-cbz cbz
361 application/x-cbr cbr

View File

@@ -1,9 +1,9 @@
#!/bin/bash
#!/usr/bin/env bash
rm -rf index.sist2/
rm web/js/bundle.js 2> /dev/null
cat `ls -v web/js/*.min.js` > web/js/bundle.js
cat `ls web/js/*.min.js` > web/js/bundle.js
cat web/js/{util,dom,search}.js >> web/js/bundle.js
rm web/css/bundle.css 2> /dev/null

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
cd lib
cd mupdf
@@ -36,4 +36,22 @@ make -j 4
cd ../..
mv onion/build/src/onion/libonion_static.a .
#bzip2
git clone https://github.com/enthought/bzip2-1.0.6
cd bzip2-1.0.6
make -j 4
cd ..
mv bzip2-1.0.6/libbz2.a .
# magic
git clone https://github.com/threatstack/libmagic
cd libmagic
./autogen.sh
./configure --enable-static --disable-shared
make -j 4
cd ..
mv libmagic/src/.libs/libmagic.a .
cd ..

View File

@@ -0,0 +1,44 @@
#!/usr/bin/env bash
cd lib
# mupdf
cd mupdf
HAVE_X11=no HAVE_GLUT=no gmake -j 4
cd ..
mv mupdf/build/release/libmupdf.a .
mv mupdf/build/release/libmupdf-third.a .
# ffmpeg
cd ffmpeg
./configure --disable-shared --enable-static --disable-ffmpeg --disable-ffplay \
--disable-ffprobe --disable-doc\
--disable-manpages --disable-postproc --disable-avfilter \
--disable-alsa --disable-lzma --disable-xlib --disable-debug\
--disable-vdpau --disable-vaapi --disable-sdl2 --disable-network
gmake -j 4
cd ..
mv ffmpeg/libavcodec/libavcodec.a .
mv ffmpeg/libavformat/libavformat.a .
mv ffmpeg/libavutil/libavutil.a .
mv ffmpeg/libswresample/libswresample.a .
mv ffmpeg/libswscale/libswscale.a .
#bzip2
git clone https://github.com/enthought/bzip2-1.0.6
cd bzip2-1.0.6
make -j 4
cd ..
mv bzip2-1.0.6/libbz2.a .
# magic
git clone https://github.com/threatstack/libmagic
cd libmagic
./autogen.sh
./configure --enable-static --disable-shared
make -j 4
cd ..
mv libmagic/src/.libs/libmagic.a .
cd ..

View File

@@ -17,8 +17,8 @@ major_mime = {
pdf = (
"application/pdf",
"application/x-cbr",
"application/x-cbz",
"application/epub+zip",
"application/vnd.ms-xpsdocument",
)

View File

@@ -17,16 +17,6 @@ scan_args_t *scan_args_create() {
return args;
}
index_args_t *index_args_create() {
index_args_t *args = calloc(sizeof(index_args_t), 1);
return args;
}
web_args_t *web_args_create() {
web_args_t *args = calloc(sizeof(web_args_t), 1);
return args;
}
int scan_args_validate(scan_args_t *args, int argc, const char **argv) {
if (argc < 2) {
fprintf(stderr, "Required positional argument: PATH.\n");
@@ -100,6 +90,7 @@ int scan_args_validate(scan_args_t *args, int argc, const char **argv) {
return 0;
}
#ifndef SIST_SCAN_ONLY
int index_args_validate(index_args_t *args, int argc, const char **argv) {
if (argc < 2) {
@@ -153,3 +144,14 @@ int web_args_validate(web_args_t *args, int argc, const char **argv) {
return 0;
}
index_args_t *index_args_create() {
index_args_t *args = calloc(sizeof(index_args_t), 1);
return args;
}
web_args_t *web_args_create() {
web_args_t *args = calloc(sizeof(web_args_t), 1);
return args;
}
#endif

View File

@@ -15,6 +15,10 @@ typedef struct scan_args {
char *path;
} scan_args_t;
scan_args_t *scan_args_create();
int scan_args_validate(scan_args_t *args, int argc, const char **argv);
#ifndef SIST_SCAN_ONLY
typedef struct index_args {
char *es_url;
const char *index_path;
@@ -30,12 +34,11 @@ typedef struct web_args {
const char **indices;
} web_args_t;
scan_args_t *scan_args_create();
index_args_t *index_args_create();
web_args_t *web_args_create();
int scan_args_validate(scan_args_t *args, int argc, const char **argv);
int index_args_validate(index_args_t *args, int argc, const char **argv);
int web_args_validate(web_args_t *args, int argc, const char **argv);
#endif
#endif

View File

@@ -26,6 +26,7 @@ struct {
} ScanCtx;
#ifndef SIST_SCAN_ONLY
struct {
char *es_url;
} IndexCtx;
@@ -35,6 +36,7 @@ struct {
int index_count;
struct index_t indices[16];
} WebCtx;
#endif
#endif

View File

@@ -115,8 +115,8 @@ void write_document(document_t *doc) {
if (IndexFd == -1) {
char dstfile[PATH_MAX];
pid_t tid = syscall(SYS_gettid);
snprintf(dstfile, PATH_MAX, "%s_index_%d", ScanCtx.index.path, tid);
pthread_t self = pthread_self();
snprintf(dstfile, PATH_MAX, "%s_index_%lu", ScanCtx.index.path, self);
IndexFd = open(dstfile, O_CREAT | O_WRONLY | O_APPEND, S_IRUSR | S_IWUSR);
if (IndexFd == -1) {

View File

@@ -1,11 +1,16 @@
#include "sist.h"
#include "ctx.h"
#ifndef SIST_SCAN_ONLY
#define DESCRIPTION "Lightning-fast file system indexer and search tool."
#else
#define DESCRIPTION "Lightning-fast file system indexer and search tool. (SCAN ONLY)"
#endif
#define EPILOG "Made by simon987 <me@simon987.net>. Released under GPL-3.0"
static const char *const Version = "1.0.7";
static const char *const Version = "1.0.9";
static const char *const usage[] = {
"sist2 scan [OPTION]... PATH",
"sist2 index [OPTION]... INDEX",
@@ -14,7 +19,9 @@ static const char *const usage[] = {
};
void global_init() {
#ifndef SIST_SCAN_ONLY
curl_global_init(CURL_GLOBAL_NOTHING);
#endif
av_log_set_level(AV_LOG_QUIET);
}
@@ -23,7 +30,7 @@ void init_dir(const char *dirpath) {
snprintf(path, PATH_MAX, "%sdescriptor.json", dirpath);
uuid_t uuid;
uuid_generate_time_safe(uuid);
uuid_generate(uuid);
uuid_unparse(uuid, ScanCtx.index.desc.uuid);
time(&ScanCtx.index.desc.timestamp);
strcpy(ScanCtx.index.desc.version, Version);
@@ -116,6 +123,7 @@ void sist2_scan(scan_args_t *args) {
store_destroy(ScanCtx.index.store);
}
#ifndef SIST_SCAN_ONLY
void sist2_index(index_args_t *args) {
IndexCtx.es_url = args->es_url;
@@ -186,6 +194,7 @@ void sist2_web(web_args_t *args) {
serve(args->bind, args->port);
}
#endif
int main(int argc, const char *argv[]) {
@@ -193,8 +202,10 @@ int main(int argc, const char *argv[]) {
global_init();
scan_args_t *scan_args = scan_args_create();
#ifndef SIST_SCAN_ONLY
index_args_t *index_args = index_args_create();
web_args_t *web_args = web_args_create();
#endif
char * common_es_url = NULL;
@@ -214,6 +225,7 @@ int main(int argc, const char *argv[]) {
OPT_STRING(0, "rewrite-url", &scan_args->rewrite_url, "Serve files from this url instead of from disk."),
OPT_STRING(0, "name", &scan_args->name, "Index display name. DEFAULT: (name of the directory)"),
#ifndef SIST_SCAN_ONLY
OPT_GROUP("Index options"),
OPT_STRING(0, "es-url", &common_es_url, "Elasticsearch url. DEFAULT=http://localhost:9200"),
OPT_BOOLEAN('p', "print", &index_args->print, "Just print JSON documents to stdout."),
@@ -224,6 +236,7 @@ int main(int argc, const char *argv[]) {
OPT_STRING(0, "es-url", &common_es_url, "Elasticsearch url. DEFAULT=http://localhost:9200"),
OPT_STRING(0, "bind", &web_args->bind, "Listen on this address. DEFAULT=localhost"),
OPT_STRING(0, "port", &web_args->port, "Listen on this port. DEFAULT=4090"),
#endif
OPT_END(),
};
@@ -233,8 +246,10 @@ int main(int argc, const char *argv[]) {
argparse_describe(&argparse, DESCRIPTION, EPILOG);
argc = argparse_parse(&argparse, argc, argv);
#ifndef SIST_SCAN_ONLY
web_args->es_url = common_es_url;
index_args->es_url = common_es_url;
#endif
if (argc == 0) {
argparse_usage(&argparse);
@@ -247,7 +262,10 @@ int main(int argc, const char *argv[]) {
}
sist2_scan(scan_args);
} else if (strcmp(argv[0], "index") == 0) {
}
#ifndef SIST_SCAN_ONLY
else if (strcmp(argv[0], "index") == 0) {
int err = index_args_validate(index_args, argc, argv);
if (err != 0) {
@@ -263,7 +281,9 @@ int main(int argc, const char *argv[]) {
}
sist2_web(web_args);
} else {
}
#endif
else {
fprintf(stderr, "Invalid command: '%s'\n", argv[0]);
argparse_usage(&argparse);
return 1;

View File

@@ -16,7 +16,7 @@ enum mime {
application_commonground=655368,
application_dicom=655369,
application_drafting=655370,
application_epub_zip=655371,
application_epub_zip=655371 | 0x40000000,
application_freeloader=655372,
application_futuresplash=655373,
application_groupwise=655374,
@@ -92,278 +92,280 @@ enum mime {
application_x_bytecode_python=655444,
application_x_bzip=655445,
application_x_bzip2=655446,
application_x_cdlink=655447,
application_x_chat=655448,
application_x_cocoa=655449,
application_x_conference=655450,
application_x_cpio=655451,
application_x_dbf=655452,
application_x_dbt=655453,
application_x_debian_package=655454,
application_x_deepv=655455,
application_x_director=655456,
application_x_dosexec=655457,
application_x_dvi=655458,
application_x_elc=655459,
application_x_cbr=655447,
application_x_cbz=655448 | 0x40000000,
application_x_cdlink=655449,
application_x_chat=655450,
application_x_cocoa=655451,
application_x_conference=655452,
application_x_cpio=655453,
application_x_dbf=655454,
application_x_dbt=655455,
application_x_debian_package=655456,
application_x_deepv=655457,
application_x_director=655458,
application_x_dosexec=655459,
application_x_dvi=655460,
application_x_elc=655461,
application_x_empty=1,
application_x_envoy=655461,
application_x_esrehber=655462,
application_x_excel=655463,
application_x_executable=655464,
application_x_font_sfn=655465 | 0x20000000,
application_x_font_ttf=655466 | 0x20000000,
application_x_freelance=655467,
application_x_git=655468,
application_x_gsp=655469,
application_x_gss=655470,
application_x_gtar=655471,
application_x_gzip=655472,
application_x_hdf=655473,
application_x_helpfile=655474,
application_x_httpd_imap=655475,
application_x_ima=655476,
application_x_innosetup=655477,
application_x_internett_signup=655478,
application_x_inventor=655479,
application_x_ip2=655480,
application_x_java_applet=655481,
application_x_java_commerce=655482,
application_x_java_image=655483,
application_x_java_keystore=655484,
application_x_kdelnk=655485,
application_x_koan=655486,
application_x_latex=655487,
application_x_livescreen=655488,
application_x_lotus=655489,
application_x_lzh=655490,
application_x_lzx=655491,
application_x_mach_binary=655492,
application_x_mach_executable=655493,
application_x_magic_cap_package_1_0=655494,
application_x_mathcad=655495,
application_x_meme=655496,
application_x_midi=655497,
application_x_mif=655498,
application_x_mix_transfer=655499,
application_x_mobipocket_ebook=655500,
application_x_ms_pdb=655501,
application_x_ms_reader=655502,
application_x_navi_animation=655503,
application_x_navidoc=655504,
application_x_navimap=655505,
application_x_navistyle=655506,
application_x_netcdf=655507,
application_x_newton_compatible_pkg=655508,
application_x_object=655509,
application_x_omc=655510,
application_x_omcdatamaker=655511,
application_x_omcregerator=655512,
application_x_pagemaker=655513,
application_x_pcl=655514,
application_x_pixclscript=655515,
application_x_pkcs7_certreqresp=655516,
application_x_pkcs7_signature=655517,
application_x_project=655518,
application_x_qpro=655519,
application_x_rar=655520,
application_x_rpm=655521,
application_x_sdp=655522,
application_x_sea=655523,
application_x_seelogo=655524,
application_x_setupscript=655525,
application_x_shar=655526,
application_x_sharedlib=655527,
application_x_shockwave_flash=655528,
application_x_sprite=655529,
application_x_sqlite3=655530,
application_x_sv4cpio=655531,
application_x_sv4crc=655532,
application_x_tar=655533,
application_x_tbook=655534,
application_x_tex_tfm=655535,
application_x_texinfo=655536,
application_x_ustar=655537,
application_x_visio=655538,
application_x_vnd_audioexplosion_mzz=655539,
application_x_vnd_ls_xpix=655540,
application_x_vrml=655541,
application_x_wais_source=655542,
application_x_wine_extension_ini=655543,
application_x_wintalk=655544,
application_x_world=655545,
application_x_wri=655546,
application_x_x509_ca_cert=655547,
application_x_xz=655548,
application_xml=655549,
application_zip=655550,
audio_it=458943,
audio_make=458944,
audio_mid=458945,
audio_midi=458946,
audio_mp4=458947,
audio_mpeg=458948,
audio_ogg=458949,
audio_s3m=458950,
audio_tsp_audio=458951,
audio_tsplayer=458952,
audio_vnd_qcelp=458953,
audio_voxware=458954,
audio_x_flac=458955,
audio_x_gsm=458956,
audio_x_jam=458957,
audio_x_liveaudio=458958,
audio_x_m4a=458959,
audio_x_midi=458960,
audio_x_mod=458961,
audio_x_mp4a_latm=458962,
audio_x_mpeg_3=458963,
audio_x_mpequrl=458964,
audio_x_nspaudio=458965,
audio_x_pn_realaudio=458966,
audio_x_psid=458967,
audio_x_realaudio=458968,
audio_x_twinvq=458969,
audio_x_twinvq_plugin=458970,
audio_x_voc=458971,
audio_x_wav=458972,
audio_xm=458973,
font_otf=327902 | 0x20000000,
font_sfnt=327903 | 0x20000000,
font_woff=327904 | 0x20000000,
font_woff2=327905 | 0x20000000,
image_cmu_raster=524514,
image_fif=524515,
image_florian=524516,
image_g3fax=524517,
image_gif=524518,
image_ief=524519,
image_jpeg=524520,
image_jutvision=524521,
image_naplps=524522,
image_pict=524523,
image_png=524524,
image_svg=524525 | 0x80000000,
image_svg_xml=524526 | 0x80000000,
image_tiff=524527,
image_vnd_adobe_photoshop=524528 | 0x80000000,
image_vnd_djvu=524529 | 0x80000000,
image_vnd_fpx=524530,
image_vnd_microsoft_icon=524531,
image_vnd_rn_realflash=524532,
image_vnd_rn_realpix=524533,
image_vnd_wap_wbmp=524534,
image_vnd_xiff=524535,
image_webp=524536,
image_x_cmu_raster=524537,
image_x_cur=524538,
image_x_dwg=524539,
image_x_eps=524540,
image_x_exr=524541,
image_x_icns=524542,
image_x_icon=524543 | 0x80000000,
image_x_jg=524544,
image_x_jps=524545,
image_x_ms_bmp=524546,
image_x_niff=524547,
image_x_pcx=524548,
image_x_pict=524549,
image_x_portable_bitmap=524550,
image_x_portable_graymap=524551,
image_x_portable_pixmap=524552,
image_x_quicktime=524553,
image_x_rgb=524554,
image_x_tga=524555,
image_x_tiff=524556,
image_x_xcf=524557 | 0x80000000,
image_x_xpixmap=524558 | 0x80000000,
image_x_xwindowdump=524559,
message_rfc822=196880,
model_vnd_dwf=65809,
model_vnd_gdl=65810,
model_vnd_gs_gdl=65811,
model_vrml=65812,
model_x_pov=65813,
text_asp=590102,
text_css=590103,
text_html=590104,
text_javascript=590105,
text_mcf=590106,
text_pascal=590107,
text_plain=590108,
text_richtext=590109,
text_scriplet=590110,
text_tab_separated_values=590111,
text_troff=590112,
text_uri_list=590113,
text_vnd_abc=590114,
text_vnd_fmi_flexstor=590115,
text_vnd_wap_wml=590116,
text_vnd_wap_wmlscript=590117,
text_webviewhtml=590118,
text_x_Algol68=590119,
text_x_asm=590120,
text_x_audiosoft_intra=590121,
text_x_awk=590122,
text_x_bcpl=590123,
text_x_c=590124,
text_x_c__=590125,
text_x_component=590126,
text_x_diff=590127,
text_x_fortran=590128,
text_x_java=590129,
text_x_la_asf=590130,
text_x_lisp=590131,
text_x_m=590132,
text_x_m4=590133,
text_x_makefile=590134,
text_x_msdos_batch=590135,
text_x_pascal=590136,
text_x_perl=590137,
text_x_php=590138,
text_x_po=590139,
text_x_python=590140,
text_x_ruby=590141,
text_x_sass=590142,
text_x_scss=590143,
text_x_server_parsed_html=590144,
text_x_setext=590145,
text_x_sgml=590146,
text_x_shellscript=590147,
text_x_speech=590148,
text_x_tcl=590149,
text_x_tex=590150,
text_x_uil=590151,
text_x_uuencode=590152,
text_x_vcalendar=590153,
text_x_vcard=590154,
text_xml=590155,
video_animaflex=393548,
video_avi=393549,
video_avs_video=393550,
video_mp4=393551,
video_mpeg=393552,
video_quicktime=393553,
video_vdo=393554,
video_vivo=393555,
video_vnd_rn_realvideo=393556,
video_vosaic=393557,
video_webm=393558,
video_x_amt_demorun=393559,
video_x_amt_showrun=393560,
video_x_atomic3d_feature=393561,
video_x_dl=393562,
video_x_dv=393563,
video_x_fli=393564,
video_x_flv=393565,
video_x_isvideo=393566,
video_x_jng=393567 | 0x80000000,
video_x_matroska=393568,
video_x_mng=393569,
video_x_motion_jpeg=393570,
video_x_ms_asf=393571,
video_x_msvideo=393572,
video_x_qtc=393573,
video_x_sgi_movie=393574,
application_x_envoy=655463,
application_x_esrehber=655464,
application_x_excel=655465,
application_x_executable=655466,
application_x_font_sfn=655467 | 0x20000000,
application_x_font_ttf=655468 | 0x20000000,
application_x_freelance=655469,
application_x_git=655470,
application_x_gsp=655471,
application_x_gss=655472,
application_x_gtar=655473,
application_x_gzip=655474,
application_x_hdf=655475,
application_x_helpfile=655476,
application_x_httpd_imap=655477,
application_x_ima=655478,
application_x_innosetup=655479,
application_x_internett_signup=655480,
application_x_inventor=655481,
application_x_ip2=655482,
application_x_java_applet=655483,
application_x_java_commerce=655484,
application_x_java_image=655485,
application_x_java_keystore=655486,
application_x_kdelnk=655487,
application_x_koan=655488,
application_x_latex=655489,
application_x_livescreen=655490,
application_x_lotus=655491,
application_x_lzh=655492,
application_x_lzx=655493,
application_x_mach_binary=655494,
application_x_mach_executable=655495,
application_x_magic_cap_package_1_0=655496,
application_x_mathcad=655497,
application_x_meme=655498,
application_x_midi=655499,
application_x_mif=655500,
application_x_mix_transfer=655501,
application_x_mobipocket_ebook=655502,
application_x_ms_pdb=655503,
application_x_ms_reader=655504,
application_x_navi_animation=655505,
application_x_navidoc=655506,
application_x_navimap=655507,
application_x_navistyle=655508,
application_x_netcdf=655509,
application_x_newton_compatible_pkg=655510,
application_x_object=655511,
application_x_omc=655512,
application_x_omcdatamaker=655513,
application_x_omcregerator=655514,
application_x_pagemaker=655515,
application_x_pcl=655516,
application_x_pixclscript=655517,
application_x_pkcs7_certreqresp=655518,
application_x_pkcs7_signature=655519,
application_x_project=655520,
application_x_qpro=655521,
application_x_rar=655522,
application_x_rpm=655523,
application_x_sdp=655524,
application_x_sea=655525,
application_x_seelogo=655526,
application_x_setupscript=655527,
application_x_shar=655528,
application_x_sharedlib=655529,
application_x_shockwave_flash=655530,
application_x_sprite=655531,
application_x_sqlite3=655532,
application_x_sv4cpio=655533,
application_x_sv4crc=655534,
application_x_tar=655535,
application_x_tbook=655536,
application_x_tex_tfm=655537,
application_x_texinfo=655538,
application_x_ustar=655539,
application_x_visio=655540,
application_x_vnd_audioexplosion_mzz=655541,
application_x_vnd_ls_xpix=655542,
application_x_vrml=655543,
application_x_wais_source=655544,
application_x_wine_extension_ini=655545,
application_x_wintalk=655546,
application_x_world=655547,
application_x_wri=655548,
application_x_x509_ca_cert=655549,
application_x_xz=655550,
application_xml=655551,
application_zip=655552,
audio_it=458945,
audio_make=458946,
audio_mid=458947,
audio_midi=458948,
audio_mp4=458949,
audio_mpeg=458950,
audio_ogg=458951,
audio_s3m=458952,
audio_tsp_audio=458953,
audio_tsplayer=458954,
audio_vnd_qcelp=458955,
audio_voxware=458956,
audio_x_flac=458957,
audio_x_gsm=458958,
audio_x_jam=458959,
audio_x_liveaudio=458960,
audio_x_m4a=458961,
audio_x_midi=458962,
audio_x_mod=458963,
audio_x_mp4a_latm=458964,
audio_x_mpeg_3=458965,
audio_x_mpequrl=458966,
audio_x_nspaudio=458967,
audio_x_pn_realaudio=458968,
audio_x_psid=458969,
audio_x_realaudio=458970,
audio_x_twinvq=458971,
audio_x_twinvq_plugin=458972,
audio_x_voc=458973,
audio_x_wav=458974,
audio_xm=458975,
font_otf=327904 | 0x20000000,
font_sfnt=327905 | 0x20000000,
font_woff=327906 | 0x20000000,
font_woff2=327907 | 0x20000000,
image_cmu_raster=524516,
image_fif=524517,
image_florian=524518,
image_g3fax=524519,
image_gif=524520,
image_ief=524521,
image_jpeg=524522,
image_jutvision=524523,
image_naplps=524524,
image_pict=524525,
image_png=524526,
image_svg=524527 | 0x80000000,
image_svg_xml=524528 | 0x80000000,
image_tiff=524529,
image_vnd_adobe_photoshop=524530 | 0x80000000,
image_vnd_djvu=524531 | 0x80000000,
image_vnd_fpx=524532,
image_vnd_microsoft_icon=524533,
image_vnd_rn_realflash=524534,
image_vnd_rn_realpix=524535,
image_vnd_wap_wbmp=524536,
image_vnd_xiff=524537,
image_webp=524538,
image_x_cmu_raster=524539,
image_x_cur=524540,
image_x_dwg=524541,
image_x_eps=524542,
image_x_exr=524543,
image_x_icns=524544,
image_x_icon=524545 | 0x80000000,
image_x_jg=524546,
image_x_jps=524547,
image_x_ms_bmp=524548,
image_x_niff=524549,
image_x_pcx=524550,
image_x_pict=524551,
image_x_portable_bitmap=524552,
image_x_portable_graymap=524553,
image_x_portable_pixmap=524554,
image_x_quicktime=524555,
image_x_rgb=524556,
image_x_tga=524557,
image_x_tiff=524558,
image_x_xcf=524559 | 0x80000000,
image_x_xpixmap=524560 | 0x80000000,
image_x_xwindowdump=524561,
message_rfc822=196882,
model_vnd_dwf=65811,
model_vnd_gdl=65812,
model_vnd_gs_gdl=65813,
model_vrml=65814,
model_x_pov=65815,
text_asp=590104,
text_css=590105,
text_html=590106,
text_javascript=590107,
text_mcf=590108,
text_pascal=590109,
text_plain=590110,
text_richtext=590111,
text_scriplet=590112,
text_tab_separated_values=590113,
text_troff=590114,
text_uri_list=590115,
text_vnd_abc=590116,
text_vnd_fmi_flexstor=590117,
text_vnd_wap_wml=590118,
text_vnd_wap_wmlscript=590119,
text_webviewhtml=590120,
text_x_Algol68=590121,
text_x_asm=590122,
text_x_audiosoft_intra=590123,
text_x_awk=590124,
text_x_bcpl=590125,
text_x_c=590126,
text_x_c__=590127,
text_x_component=590128,
text_x_diff=590129,
text_x_fortran=590130,
text_x_java=590131,
text_x_la_asf=590132,
text_x_lisp=590133,
text_x_m=590134,
text_x_m4=590135,
text_x_makefile=590136,
text_x_msdos_batch=590137,
text_x_pascal=590138,
text_x_perl=590139,
text_x_php=590140,
text_x_po=590141,
text_x_python=590142,
text_x_ruby=590143,
text_x_sass=590144,
text_x_scss=590145,
text_x_server_parsed_html=590146,
text_x_setext=590147,
text_x_sgml=590148,
text_x_shellscript=590149,
text_x_speech=590150,
text_x_tcl=590151,
text_x_tex=590152,
text_x_uil=590153,
text_x_uuencode=590154,
text_x_vcalendar=590155,
text_x_vcard=590156,
text_xml=590157,
video_animaflex=393550,
video_avi=393551,
video_avs_video=393552,
video_mp4=393553,
video_mpeg=393554,
video_quicktime=393555,
video_vdo=393556,
video_vivo=393557,
video_vnd_rn_realvideo=393558,
video_vosaic=393559,
video_webm=393560,
video_x_amt_demorun=393561,
video_x_amt_showrun=393562,
video_x_atomic3d_feature=393563,
video_x_dl=393564,
video_x_dv=393565,
video_x_fli=393566,
video_x_flv=393567,
video_x_isvideo=393568,
video_x_jng=393569 | 0x80000000,
video_x_matroska=393570,
video_x_mng=393571,
video_x_motion_jpeg=393572,
video_x_ms_asf=393573,
video_x_msvideo=393574,
video_x_qtc=393575,
video_x_sgi_movie=393576,
};
char *mime_get_mime_text(unsigned int mime_id) {switch (mime_id) {
case application_arj: return "application/arj";
@@ -724,6 +726,8 @@ case application_x_innosetup: return "application/x-innosetup";
case application_winhelp: return "application/winhelp";
case image_x_tga: return "image/x-tga";
case application_x_wine_extension_ini: return "application/x-wine-extension-ini";
case application_x_cbz: return "application/x-cbz";
case application_x_cbr: return "application/x-cbr";
default: return NULL;}}
GHashTable *mime_get_ext_table() {GHashTable *ext_table = g_hash_table_new(g_str_hash, g_str_equal);
g_hash_table_insert(ext_table, "arj", (gpointer)application_arj);
@@ -1201,6 +1205,8 @@ g_hash_table_insert(ext_table, "djvu", (gpointer)image_vnd_djvu);
g_hash_table_insert(ext_table, "lit", (gpointer)application_x_ms_reader);
g_hash_table_insert(ext_table, "vcf", (gpointer)text_x_vcard);
g_hash_table_insert(ext_table, "hlp", (gpointer)application_winhelp);
g_hash_table_insert(ext_table, "cbz", (gpointer)application_x_cbz);
g_hash_table_insert(ext_table, "cbr", (gpointer)application_x_cbr);
return ext_table;}
GHashTable *mime_get_mime_table() {GHashTable *mime_table = g_hash_table_new(g_str_hash, g_str_equal);
g_hash_table_insert(mime_table, "application/arj", (gpointer)application_arj);
@@ -1561,5 +1567,7 @@ g_hash_table_insert(mime_table, "application/x-innosetup", (gpointer)application
g_hash_table_insert(mime_table, "application/winhelp", (gpointer)application_winhelp);
g_hash_table_insert(mime_table, "image/x-tga", (gpointer)image_x_tga);
g_hash_table_insert(mime_table, "application/x-wine-extension-ini", (gpointer)application_x_wine_extension_ini);
g_hash_table_insert(mime_table, "application/x-cbz", (gpointer)application_x_cbz);
g_hash_table_insert(mime_table, "application/x-cbr", (gpointer)application_x_cbr);
return mime_table;}
#endif

View File

@@ -57,7 +57,7 @@ void parse(void *arg) {
doc.ino = job->info.st_ino;
doc.mtime = job->info.st_mtim.tv_sec;
uuid_generate_time_safe(doc.uuid);
uuid_generate(doc.uuid);
char *buf[PARSE_BUF_SIZE];
if (job->info.st_size == 0) {

View File

@@ -25,19 +25,20 @@
#include <pthread.h>
#include <sys/stat.h>
#include <wordexp.h>
#ifndef SIST_SCAN_ONLY
#include <onion/onion.h>
#include <onion/handler.h>
#include <onion/block.h>
#include <onion/shortcuts.h>
#include <curl/curl.h>
#endif
#include "cJSON/cJSON.h"
#include "types.h"
#include "tpool.h"
#include "util.h"
#include "src/index/elastic.h"
#include "io/store.h"
#include "io/serialize.h"
#include "io/walk.h"
@@ -47,9 +48,13 @@
#include "parsing/pdf.h"
#include "parsing/media.h"
#include "parsing/font.h"
#include "cli.h"
#ifndef SIST_SCAN_ONLY
#include "src/index/elastic.h"
#include "index/web.h"
#include "web/serve.h"
#include "cli.h"
#endif
;

View File

@@ -1,6 +1,133 @@
#define _GNU_SOURCE
#include "util.h"
dyn_buffer_t dyn_buffer_create() {
dyn_buffer_t buf;
buf.size = INITIAL_BUF_SIZE;
buf.cur = 0;
buf.buf = malloc(INITIAL_BUF_SIZE);
return buf;
}
void grow_buffer(dyn_buffer_t *buf, size_t size) {
if (buf->cur + size > buf->size) {
do {
buf->size *= 2;
} while (buf->cur + size > buf->size);
buf->buf = realloc(buf->buf, buf->size);
}
}
void grow_buffer_small(dyn_buffer_t *buf) {
if (buf->cur + sizeof(long) > buf->size) {
buf->size *= 2;
buf->buf = realloc(buf->buf, buf->size);
}
}
void dyn_buffer_write(dyn_buffer_t *buf, void *data, size_t size) {
grow_buffer(buf, size);
memcpy(buf->buf + buf->cur, data, size);
buf->cur += size;
}
void dyn_buffer_write_char(dyn_buffer_t *buf, char c) {
grow_buffer_small(buf);
*(buf->buf + buf->cur) = c;
buf->cur += sizeof(c);
}
void dyn_buffer_write_str(dyn_buffer_t *buf, char *str) {
dyn_buffer_write(buf, str, strlen(str));
dyn_buffer_write_char(buf, '\0');
}
void dyn_buffer_write_int(dyn_buffer_t *buf, int d) {
grow_buffer_small(buf);
*(int *) (buf->buf + buf->cur) = d;
buf->cur += sizeof(int);
}
void dyn_buffer_write_short(dyn_buffer_t *buf, short s) {
grow_buffer_small(buf);
*(short *) (buf->buf + buf->cur) = s;
buf->cur += sizeof(short);
}
void dyn_buffer_write_long(dyn_buffer_t *buf, unsigned long l) {
grow_buffer_small(buf);
*(unsigned long *) (buf->buf + buf->cur) = l;
buf->cur += sizeof(unsigned long);
}
void dyn_buffer_destroy(dyn_buffer_t *buf) {
free(buf->buf);
}
void text_buffer_destroy(text_buffer_t *buf) {
dyn_buffer_destroy(&buf->dyn_buffer);
}
text_buffer_t text_buffer_create(int max_size) {
text_buffer_t text_buf;
text_buf.dyn_buffer = dyn_buffer_create();
text_buf.max_size = max_size;
text_buf.last_char_was_whitespace = FALSE;
return text_buf;
}
void text_buffer_terminate_string(text_buffer_t *buf) {
dyn_buffer_write_char(&buf->dyn_buffer, '\0');
}
int text_buffer_append_char(text_buffer_t *buf, int c) {
if (SHOULD_IGNORE_CHAR(c)) {
if (!buf->last_char_was_whitespace) {
dyn_buffer_write_char(&buf->dyn_buffer, ' ');
buf->last_char_was_whitespace = TRUE;
if (buf->dyn_buffer.cur >= buf->max_size) {
return TEXT_BUF_FULL;
}
}
} else {
buf->last_char_was_whitespace = FALSE;
dyn_buffer_write_char(&buf->dyn_buffer, (char) c);
if (buf->dyn_buffer.cur >= buf->max_size) {
return TEXT_BUF_FULL;
}
}
return 0;
}
void incremental_put(GHashTable *table, unsigned long inode_no, int mtime) {
g_hash_table_insert(table, (gpointer) inode_no, GINT_TO_POINTER(mtime));
}
int incremental_get(GHashTable *table, unsigned long inode_no) {
if (table != NULL) {
return GPOINTER_TO_INT(g_hash_table_lookup(table, (gpointer) inode_no));
} else {
return 0;
}
}
int incremental_mark_file_for_copy(GHashTable *table, unsigned long inode_no) {
g_hash_table_insert(table, GINT_TO_POINTER(inode_no), GINT_TO_POINTER(1));
}
#define PBSTR "========================================"
#define PBWIDTH 40
@@ -27,7 +154,7 @@ char *abspath(const char *path) {
wordexp_t w;
wordexp(path, &w, 0);
char *abs = canonicalize_file_name(w.we_wordv[0]);
char *abs = realpath(w.we_wordv[0], NULL);
if (abs == NULL) {
return NULL;
}

View File

@@ -21,132 +21,6 @@ typedef struct text_buffer {
dyn_buffer_t dyn_buffer;
} text_buffer_t;
__always_inline
dyn_buffer_t dyn_buffer_create() {
dyn_buffer_t buf;
buf.size = INITIAL_BUF_SIZE;
buf.cur = 0;
buf.buf = malloc(INITIAL_BUF_SIZE);
return buf;
}
__always_inline
void grow_buffer(dyn_buffer_t *buf, size_t size) {
if (buf->cur + size > buf->size) {
do {
buf->size *= 2;
} while (buf->cur + size > buf->size);
buf->buf = realloc(buf->buf, buf->size);
}
}
__always_inline
void grow_buffer_small(dyn_buffer_t *buf) {
if (buf->cur + sizeof(long) > buf->size) {
buf->size *= 2;
buf->buf = realloc(buf->buf, buf->size);
}
}
__always_inline
void dyn_buffer_write(dyn_buffer_t *buf, void *data, size_t size) {
grow_buffer(buf, size);
memcpy(buf->buf + buf->cur, data, size);
buf->cur += size;
}
__always_inline
void dyn_buffer_write_char(dyn_buffer_t *buf, char c) {
grow_buffer_small(buf);
*(buf->buf + buf->cur) = c;
buf->cur += sizeof(c);
}
__always_inline
void dyn_buffer_write_str(dyn_buffer_t *buf, char *str) {
dyn_buffer_write(buf, str, strlen(str));
dyn_buffer_write_char(buf, '\0');
}
__always_inline
void dyn_buffer_write_int(dyn_buffer_t *buf, int d) {
grow_buffer_small(buf);
*(int *) (buf->buf + buf->cur) = d;
buf->cur += sizeof(int);
}
__always_inline
void dyn_buffer_write_short(dyn_buffer_t *buf, short s) {
grow_buffer_small(buf);
*(short *) (buf->buf + buf->cur) = s;
buf->cur += sizeof(short);
}
__always_inline
void dyn_buffer_write_long(dyn_buffer_t *buf, unsigned long l) {
grow_buffer_small(buf);
*(unsigned long *) (buf->buf + buf->cur) = l;
buf->cur += sizeof(unsigned long);
}
__always_inline
void dyn_buffer_destroy(dyn_buffer_t *buf) {
free(buf->buf);
}
__always_inline
void text_buffer_destroy(text_buffer_t *buf) {
dyn_buffer_destroy(&buf->dyn_buffer);
}
__always_inline
text_buffer_t text_buffer_create(int max_size) {
text_buffer_t text_buf;
text_buf.dyn_buffer = dyn_buffer_create();
text_buf.max_size = max_size;
text_buf.last_char_was_whitespace = FALSE;
return text_buf;
}
__always_inline
void text_buffer_terminate_string(text_buffer_t *buf) {
dyn_buffer_write_char(&buf->dyn_buffer, '\0');
}
__always_inline
int text_buffer_append_char(text_buffer_t *buf, int c) {
if (SHOULD_IGNORE_CHAR(c)) {
if (!buf->last_char_was_whitespace) {
dyn_buffer_write_char(&buf->dyn_buffer, ' ');
buf->last_char_was_whitespace = TRUE;
if (buf->dyn_buffer.cur >= buf->max_size) {
return TEXT_BUF_FULL;
}
}
} else {
buf->last_char_was_whitespace = FALSE;
dyn_buffer_write_char(&buf->dyn_buffer, (char) c);
if (buf->dyn_buffer.cur >= buf->max_size) {
return TEXT_BUF_FULL;
}
}
return 0;
}
char *abspath(const char * path);
char *expandpath(const char *path);
dyn_buffer_t url_escape(char *str);
@@ -154,27 +28,41 @@ dyn_buffer_t url_escape(char *str);
void progress_bar_print(double percentage, size_t tn_size, size_t index_size);
__always_inline
void incremental_put(GHashTable *table, unsigned long inode_no, int mtime) {
g_hash_table_insert(table, (gpointer) inode_no, GINT_TO_POINTER(mtime));
}
__always_inline
int incremental_get(GHashTable *table, unsigned long inode_no) {
if (table != NULL) {
return GPOINTER_TO_INT(g_hash_table_lookup(table, (gpointer) inode_no));
} else {
return 0;
}
}
__always_inline
int incremental_mark_file_for_copy(GHashTable *table, unsigned long inode_no) {
g_hash_table_insert(table, GINT_TO_POINTER(inode_no), GINT_TO_POINTER(1));
}
GHashTable *incremental_get_table();
dyn_buffer_t dyn_buffer_create();
void grow_buffer(dyn_buffer_t *buf, size_t size);
void grow_buffer_small(dyn_buffer_t *buf);
void dyn_buffer_write(dyn_buffer_t *buf, void *data, size_t size);
void dyn_buffer_write_char(dyn_buffer_t *buf, char c);
void dyn_buffer_write_str(dyn_buffer_t *buf, char *str);
void dyn_buffer_write_int(dyn_buffer_t *buf, int d);
void dyn_buffer_write_short(dyn_buffer_t *buf, short s);
void dyn_buffer_write_long(dyn_buffer_t *buf, unsigned long l);
void dyn_buffer_destroy(dyn_buffer_t *buf);
void text_buffer_destroy(text_buffer_t *buf);
text_buffer_t text_buffer_create(int max_size);
void text_buffer_terminate_string(text_buffer_t *buf);
int text_buffer_append_char(text_buffer_t *buf, int c);
void incremental_put(GHashTable *table, unsigned long inode_no, int mtime);
int incremental_get(GHashTable *table, unsigned long inode_no);
int incremental_mark_file_for_copy(GHashTable *table, unsigned long inode_no);
#endif

File diff suppressed because one or more lines are too long

View File

@@ -129,6 +129,8 @@ function createDocCard(hit) {
});
} else if ((hit["_source"].hasOwnProperty("width") && hit["_source"]["width"] > 20 && hit["_source"]["height"] > 20)
|| hit["_source"]["mime"] === "application/pdf"
|| hit["_source"]["mime"] === "application/epub+zip"
|| hit["_source"]["mime"] === "application/x-cbz"
|| hit["_source"].hasOwnProperty("font_name")
) {
thumbnail = document.createElement("img");

View File

@@ -29,7 +29,7 @@ $.jsonPost("i").then(resp => {
resp["indices"].forEach(idx => {
$("#indices").append($("<option>")
.attr("value", idx.id)
.attr("selected", true)
.attr("selected", !idx.name.includes("(nsfw)"))
.append(idx.name)
);
selectedIndices.push(idx.id);