[build] automate building the linux static binary

pull/112/head
Timothy Stack 10 years ago
parent c7cd0961ab
commit f9098e6bc4

6
.gitignore vendored

@ -14,3 +14,9 @@ src/static-libs/
test/.deps/
test/Makefile
*.pyc
release/vagrant-static-linux/.vagrant
release/vagrant-static-linux/lnav
release/linux-pkg/
release/osx-build-dir/
release/osx-pkg/
release/outbox/

@ -0,0 +1,34 @@
VERSION=0.7.1
outbox:
mkdir -p $@
clean-outbox: outbox
rm -f outbox/*
linux-vm:
cd vagrant-static-linux && vagrant up
linux-build: linux-vm
cd vagrant-static-linux && vagrant ssh -c /vagrant/build.sh
linux-package: clean-outbox linux-build
mkdir -p linux-pkg/lnav-${VERSION}
cp ../README ../NEWS linux-pkg/lnav-${VERSION}
cp vagrant-static-linux/lnav linux-pkg/lnav-${VERSION}
cd linux-pkg && zip -r ../outbox/lnav-${VERSION}-linux-64bit.zip lnav-${VERSION}
osx-build:
rm -rf osx-build-dir
mkdir -p osx-build-dir
cd osx-build-dir && ../../configure && make -j && make distcheck -j8
osx-package: clean-outbox osx-build
mkdir -p osx-pkg/lnav-${VERSION}
cp ../README ../NEWS osx-pkg/lnav-${VERSION}
cp osx-build-dir/src/lnav osx-pkg/lnav-${VERSION}
cp osx-build-dir/lnav-${VERSION}.tar.gz outbox/
cd osx-pkg && zip -r ../outbox/lnav-${VERSION}-os-x.zip lnav-${VERSION}
release: linux-package osx-package

@ -0,0 +1,129 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "hansode/centos-5.6-x86_64"
config.vm.provision "shell", path: "provision.sh"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 4
end
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# If true, then any SSH connections made will enable agent forwarding.
# Default value: false
# config.ssh.forward_agent = true
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Don't boot with headless mode
# vb.gui = true
#
# # Use VBoxManage to customize the VM. For example to change memory:
# vb.customize ["modifyvm", :id, "--memory", "1024"]
# end
#
# View the documentation for the provider you're using for more
# information on available options.
# Enable provisioning with CFEngine. CFEngine Community packages are
# automatically installed. For example, configure the host as a
# policy server and optionally a policy file to run:
#
# config.vm.provision "cfengine" do |cf|
# cf.am_policy_hub = true
# # cf.run_file = "motd.cf"
# end
#
# You can also configure and bootstrap a client to an existing
# policy server:
#
# config.vm.provision "cfengine" do |cf|
# cf.policy_server_address = "10.0.2.15"
# end
# Enable provisioning with Puppet stand alone. Puppet manifests
# are contained in a directory path relative to this Vagrantfile.
# You will need to create the manifests directory and a manifest in
# the file default.pp in the manifests_path directory.
#
# config.vm.provision "puppet" do |puppet|
# puppet.manifests_path = "manifests"
# puppet.manifest_file = "site.pp"
# end
# Enable provisioning with chef solo, specifying a cookbooks path, roles
# path, and data_bags path (all relative to this Vagrantfile), and adding
# some recipes and/or roles.
#
# config.vm.provision "chef_solo" do |chef|
# chef.cookbooks_path = "../my-recipes/cookbooks"
# chef.roles_path = "../my-recipes/roles"
# chef.data_bags_path = "../my-recipes/data_bags"
# chef.add_recipe "mysql"
# chef.add_role "web"
#
# # You may also specify custom JSON attributes:
# chef.json = { mysql_password: "foo" }
# end
# Enable provisioning with chef server, specifying the chef server URL,
# and the path to the validation key (relative to this Vagrantfile).
#
# The Opscode Platform uses HTTPS. Substitute your organization for
# ORGNAME in the URL and validation key.
#
# If you have your own Chef Server, use the appropriate URL, which may be
# HTTP instead of HTTPS depending on your configuration. Also change the
# validation key to validation.pem.
#
# config.vm.provision "chef_client" do |chef|
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
# chef.validation_key_path = "ORGNAME-validator.pem"
# end
#
# If you're using the Opscode platform, your validator client is
# ORGNAME-validator, replacing ORGNAME with your organization name.
#
# If you have your own Chef Server, the default validation client name is
# chef-validator, unless you changed the configuration.
#
# chef.validation_client_name = "ORGNAME-validator"
end

@ -0,0 +1,25 @@
#! /bin/bash
FAKE_ROOT=/home/vagrant/fake.root
cd ~/github
if ! test -d lnav; then
git clone git://github.com/tstack/lnav.git
fi
cd ~/github/lnav
git pull
rm -rf ~/github/lbuild
mkdir -p ~/github/lbuild
cd ~/github/lbuild
../lnav/configure \
CC="gcc44" \
CXX="g++44" \
LDFLAGS="-L${FAKE_ROOT}/lib" \
PATH="${FAKE_ROOT}/bin:${PATH}" \
CPPFLAGS="-I${FAKE_ROOT}/include"
make -j2 && strip -o /vagrant/lnav src/lnav

@ -0,0 +1,76 @@
#! /bin/bash
FAKE_ROOT=/home/vagrant/fake.root
rm -rf ~/extract
mkdir -p ~/fake.root ~/packages ~/extract ~/github
export PATH=${FAKE_ROOT}/bin:${PATH}
wget -N http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
sudo rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
sudo rpm -K rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
sudo rpm -U rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
sudo yum install -y m4 git gcc44-c++
cd ~/github
PACKAGE_URLS="\
http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz \
http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz \
ftp://invisible-island.net/ncurses/ncurses-5.9.tar.gz \
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz \
ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz \
http://zlib.net/zlib-1.2.8.tar.gz \
http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz \
http://www.sqlite.org/2014/sqlite-autoconf-3080701.tar.gz"
cd ~/packages
for url in $PACKAGE_URLS; do
wget -N $url
done
cd ~/extract
for pkg in ~/packages/*.tar.gz; do
tar xfz $pkg
done
(cd autoconf-2.69 && ./configure --prefix=${FAKE_ROOT} && make && make install)
(cd automake-1.14 && ./configure --prefix=${FAKE_ROOT} && make && make install)
(cd ncurses-5.9 && \
./configure --prefix=${FAKE_ROOT} \
--enable-ext-mouse \
--enable-sigwinch \
--with-default-terminfo-dir=/usr/share/terminfo \
--enable-ext-colors \
--enable-widec \
CC="gcc44" \
CXX="g++44" \
&& \
make && make install)
(cd pcre-8.36 && \
./configure --prefix=${FAKE_ROOT} \
--enable-jit \
--enable-utf \
CC="gcc44" \
CXX="g++44" \
&& \
make && make install)
(cd readline-6.3 && ./configure --prefix=${FAKE_ROOT} && make && make install)
(cd zlib-1.2.8 && ./configure --prefix=${FAKE_ROOT} && make && make install)
(cd bzip2-1.0.6 && make install PREFIX=${FAKE_ROOT})
(cd sqlite-* &&
./configure --prefix=${FAKE_ROOT} \
CFLAGS="-DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_SOUNDEX" \
&& \
make && make install)

@ -228,7 +228,7 @@ struct date_time_scanner {
}
else {
time_t adjust_gmt = t - this->dts_local_offset_cache;
secs2tm(&adjust_gmt, &tm_out.et_tm);
gmtime_r(&adjust_gmt, &tm_out.et_tm);
}
};

@ -113,7 +113,7 @@ static bool bind_line(sqlite3 *db,
if (sqlite3_bind_text(stmt, 1,
timestamp, strlen(timestamp),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log time -- %s\n",
log_error("could not bind log time -- %s\n",
sqlite3_errmsg(db));
return false;
}
@ -123,7 +123,7 @@ static bool bind_line(sqlite3 *db,
if (sqlite3_bind_text(stmt, 2,
format_name.c_str(), format_name.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log format -- %s\n",
log_error("could not bind log format -- %s\n",
sqlite3_errmsg(db));
return false;
}
@ -133,13 +133,13 @@ static bool bind_line(sqlite3 *db,
if (sqlite3_bind_text(stmt, 3,
line_hash.c_str(), line_hash.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db));
return false;
}
if (sqlite3_bind_int64(stmt, 4, session_time) != SQLITE_OK) {
fprintf(stderr, "error: could not bind session time -- %s\n",
log_error("could not bind session time -- %s\n",
sqlite3_errmsg(db));
return false;
}
@ -222,8 +222,8 @@ static void cleanup_session_data(void)
}
else {
if (remove(front.sfi_path.c_str()) != 0) {
fprintf(stderr,
"error: Unable to remove session file: %s -- %s\n",
log_error(
"Unable to remove session file: %s -- %s\n",
front.sfi_path.c_str(),
strerror(errno));
}
@ -238,8 +238,8 @@ static void cleanup_session_data(void)
const session_file_info &front = session_info_list.front();
if (remove(front.sfi_path.c_str()) != 0) {
fprintf(stderr,
"error: Unable to remove session file: %s -- %s\n",
log_error(
"Unable to remove session file: %s -- %s\n",
front.sfi_path.c_str(),
strerror(errno));
}
@ -323,8 +323,8 @@ void scan_sessions(void)
const std::string &name = session_file_names.front().second;
if (remove(name.c_str()) != 0) {
fprintf(stderr,
"error: Unable to remove session: %s -- %s\n",
log_error(
"Unable to remove session: %s -- %s\n",
name.c_str(),
strerror(errno));
}
@ -365,8 +365,8 @@ static void load_time_bookmarks(void)
-1,
stmt.out(),
NULL) != SQLITE_OK) {
fprintf(stderr,
"error: could not prepare bookmark select statemnt -- %s\n",
log_error(
"could not prepare bookmark select statemnt -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -389,7 +389,7 @@ static void load_time_bookmarks(void)
lf->original_line_time(line_iter), 'T');
if (sqlite3_bind_int64(stmt.in(), 1, lnav_data.ld_session_load_time) != SQLITE_OK) {
fprintf(stderr, "error: could not bind session time -- %s\n",
log_error("could not bind session time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -397,7 +397,7 @@ static void load_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 2,
low_timestamp, strlen(low_timestamp),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind low log time -- %s\n",
log_error("could not bind low log time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -410,7 +410,7 @@ static void load_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 3,
high_timestamp, strlen(high_timestamp),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind high log time -- %s\n",
log_error("could not bind high log time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -420,7 +420,7 @@ static void load_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 4,
format_name.c_str(), format_name.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log format -- %s\n",
log_error("could not bind log format -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -504,8 +504,8 @@ static void load_time_bookmarks(void)
const char *errmsg;
errmsg = sqlite3_errmsg(lnav_data.ld_db);
fprintf(stderr,
"error: bookmark select error: code %d -- %s\n",
log_error(
"bookmark select error: code %d -- %s\n",
rc,
errmsg);
done = true;
@ -524,8 +524,8 @@ static void load_time_bookmarks(void)
-1,
stmt.out(),
NULL) != SQLITE_OK) {
fprintf(stderr,
"error: could not prepare time_offset select statemnt -- %s\n",
log_error(
"could not prepare time_offset select statemnt -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -548,7 +548,7 @@ static void load_time_bookmarks(void)
lf->original_line_time(line_iter), 'T');
if (sqlite3_bind_int64(stmt.in(), 1, lnav_data.ld_session_load_time) != SQLITE_OK) {
fprintf(stderr, "error: could not bind session time -- %s\n",
log_error("could not bind session time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -556,7 +556,7 @@ static void load_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 2,
low_timestamp, strlen(low_timestamp),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind low log time -- %s\n",
log_error("could not bind low log time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -569,7 +569,7 @@ static void load_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 3,
high_timestamp, strlen(high_timestamp),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind high log time -- %s\n",
log_error("could not bind high log time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -579,7 +579,7 @@ static void load_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 4,
format_name.c_str(), format_name.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log format -- %s\n",
log_error("could not bind log format -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -657,8 +657,8 @@ static void load_time_bookmarks(void)
const char *errmsg;
errmsg = sqlite3_errmsg(lnav_data.ld_db);
fprintf(stderr,
"error: bookmark select error: code %d -- %s\n",
log_error(
"bookmark select error: code %d -- %s\n",
rc,
errmsg);
done = true;
@ -839,7 +839,7 @@ static void save_user_bookmarks(
if (meta_iter == bm_meta.end()) {
if (sqlite3_bind_text(stmt, 5, "", 0, SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -849,15 +849,15 @@ static void save_user_bookmarks(
meta_iter->second.bm_name.c_str(),
meta_iter->second.bm_name.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db));
return;
}
}
if (sqlite3_step(stmt) != SQLITE_DONE) {
fprintf(stderr,
"error: could not execute bookmark insert statement -- %s\n",
log_error(
"could not execute bookmark insert statement -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -875,17 +875,17 @@ static void save_time_bookmarks(void)
auto_mem<sqlite3_stmt> stmt(sqlite3_finalize);
if (sqlite3_open(db_path.c_str(), db.out()) != SQLITE_OK) {
fprintf(stderr, "error: unable to open bookmark DB -- %s\n", db_path.c_str());
log_error("unable to open bookmark DB -- %s\n", db_path.c_str());
return;
}
if (sqlite3_exec(db.in(), BOOKMARK_TABLE_DEF, NULL, NULL, errmsg.out()) != SQLITE_OK) {
fprintf(stderr, "error: unable to make bookmark table -- %s\n", errmsg.in());
log_error("unable to make bookmark table -- %s\n", errmsg.in());
return;
}
if (sqlite3_exec(db.in(), "BEGIN TRANSACTION", NULL, NULL, errmsg.out()) != SQLITE_OK) {
fprintf(stderr, "error: unable to begin transaction -- %s\n", errmsg.in());
log_error("unable to begin transaction -- %s\n", errmsg.in());
return;
}
@ -899,8 +899,8 @@ static void save_time_bookmarks(void)
-1,
stmt.out(),
NULL) != SQLITE_OK) {
fprintf(stderr,
"error: could not prepare bookmark delete statemnt -- %s\n",
log_error(
"could not prepare bookmark delete statemnt -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -914,8 +914,8 @@ static void save_time_bookmarks(void)
}
if (sqlite3_step(stmt.in()) != SQLITE_DONE) {
fprintf(stderr,
"error: could not execute bookmark insert statement -- %s\n",
log_error(
"could not execute bookmark insert statement -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -932,8 +932,8 @@ static void save_time_bookmarks(void)
-1,
stmt.out(),
NULL) != SQLITE_OK) {
fprintf(stderr,
"error: could not prepare bookmark replace statemnt -- %s\n",
log_error(
"could not prepare bookmark replace statemnt -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -960,14 +960,14 @@ static void save_time_bookmarks(void)
}
if (sqlite3_bind_null(stmt.in(), 5) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
if (sqlite3_step(stmt.in()) != SQLITE_DONE) {
fprintf(stderr,
"error: could not execute bookmark insert statement -- %s\n",
log_error(
"could not execute bookmark insert statement -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -986,8 +986,8 @@ static void save_time_bookmarks(void)
-1,
stmt.out(),
NULL) != SQLITE_OK) {
fprintf(stderr,
"error: could not prepare time_offset delete statemnt -- %s\n",
log_error(
"could not prepare time_offset delete statemnt -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -1001,8 +1001,8 @@ static void save_time_bookmarks(void)
}
if (sqlite3_step(stmt.in()) != SQLITE_DONE) {
fprintf(stderr,
"error: could not execute bookmark insert statement -- %s\n",
log_error(
"could not execute bookmark insert statement -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -1019,8 +1019,8 @@ static void save_time_bookmarks(void)
-1,
stmt.out(),
NULL) != SQLITE_OK) {
fprintf(stderr,
"error: could not prepare time_offset replace statemnt -- %s\n",
log_error(
"could not prepare time_offset replace statemnt -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -1045,20 +1045,20 @@ static void save_time_bookmarks(void)
}
if (sqlite3_bind_null(stmt.in(), 5) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
if (sqlite3_bind_null(stmt.in(), 6) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
if (sqlite3_step(stmt.in()) != SQLITE_DONE) {
fprintf(stderr,
"error: could not execute bookmark insert statement -- %s\n",
log_error(
"could not execute bookmark insert statement -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -1089,7 +1089,7 @@ static void save_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 1,
timestamp, strlen(timestamp),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log time -- %s\n",
log_error("could not bind log time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -1099,7 +1099,7 @@ static void save_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 2,
format_name.c_str(), format_name.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log format -- %s\n",
log_error("could not bind log format -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -1109,13 +1109,13 @@ static void save_time_bookmarks(void)
if (sqlite3_bind_text(stmt.in(), 3,
line_hash.c_str(), line_hash.length(),
SQLITE_TRANSIENT) != SQLITE_OK) {
fprintf(stderr, "error: could not bind log hash -- %s\n",
log_error("could not bind log hash -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
if (sqlite3_bind_int64(stmt.in(), 4, lnav_data.ld_session_time) != SQLITE_OK) {
fprintf(stderr, "error: could not bind session time -- %s\n",
log_error("could not bind session time -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
@ -1123,20 +1123,20 @@ static void save_time_bookmarks(void)
struct timeval offset = lf->get_time_offset();
if (sqlite3_bind_int64(stmt.in(), 5, offset.tv_sec) != SQLITE_OK) {
fprintf(stderr, "error: could not bind offset_sec -- %s\n",
log_error("could not bind offset_sec -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
if (sqlite3_bind_int64(stmt.in(), 6, offset.tv_usec) != SQLITE_OK) {
fprintf(stderr, "error: could not bind offset_usec -- %s\n",
log_error("could not bind offset_usec -- %s\n",
sqlite3_errmsg(db.in()));
return;
}
if (sqlite3_step(stmt.in()) != SQLITE_DONE) {
fprintf(stderr,
"error: could not execute bookmark insert statement -- %s\n",
log_error(
"could not execute bookmark insert statement -- %s\n",
sqlite3_errmsg(db));
return;
}
@ -1145,12 +1145,12 @@ static void save_time_bookmarks(void)
}
if (sqlite3_exec(db.in(), "COMMIT", NULL, NULL, errmsg.out()) != SQLITE_OK) {
fprintf(stderr, "error: unable to begin transaction -- %s\n", errmsg.in());
log_error("unable to begin transaction -- %s\n", errmsg.in());
return;
}
if (sqlite3_exec(db.in(), BOOKMARK_LRU_STMT, NULL, NULL, errmsg.out()) != SQLITE_OK) {
fprintf(stderr, "error: unable to delete old bookmarks -- %s\n", errmsg.in());
log_error("unable to delete old bookmarks -- %s\n", errmsg.in());
return;
}
}

Loading…
Cancel
Save