# ChangeLog for app-admin/clsync
# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-admin/clsync/ChangeLog,v 1.1 2015/02/11 03:39:24 bircoph Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-admin/clsync/ChangeLog,v 1.2 2015/02/20 18:36:49 bircoph Exp $
+
+*clsync-0.4-r1 (20 Feb 2015)
+
+ 20 Feb 2015; Andrew Savchenko <bircoph@gentoo.org> +clsync-0.4-r1.ebuild,
+ +files/clsync-0.4-retries-arg.patch, +files/clsync-0.4-strtol.patch:
+ Apply upstream fixes to parser bugs.
*clsync-0.4 (11 Feb 2015)
AUX clsync-0.4-gio.patch 1254 SHA256 2bc5cc03cd456ed09879e77e963e17bedb05d3deaff77f4d18bdc67c521773f1 SHA512 888f0941dcfd8843007afee889c005c613d731750882b0acbadceb08b514f177b9b75f992827050a40247002c8d29d7fcf4e75eabafe6eb54fc1d05e30893ffd WHIRLPOOL 5df5185fd97bb4d77297e40e1722b4ddfbb27c444c6a506939ee9a3075be0200aeca3c0f08f62e9650a04583cd55f1d05c106a77b7f2eb2e9af3621f9597d4f2
AUX clsync-0.4-handler_path.patch 822 SHA256 fcd4f9ff6308e18984dd4a97bda2d3bd9c9de8bd37a9ef758d6e0ba2485c70c6 SHA512 de4a7fa17e158f5527a4b28e90414ee8513a140fed2f62815578e9e97550662c0cc7d36d3debd366c7543cb879763443dc839356640647d82f6709c954c4f0ad WHIRLPOOL 9f18153267d70f4964e8d7a14b87e3a21056874254874452a9895bc3613515f5f9d059b5c10bb8d7ffd0077e5eb00c8fcbd52059807dc65553875d59e05d3777
AUX clsync-0.4-hl_locks.patch 899 SHA256 ee85116d992dd9e089e2e0a3f0bfbc5502705e4de08953b13a2bd00ed259d3bf SHA512 279bb3560a37a163763d9de09c894d8d98e79ed32e3f1c2f2231d567b0492f93c078a560296c706536ddabddf05e4218f106a0f271f8bcd3c9b18cee153083d0 WHIRLPOOL de98b88abb9089456157366b9145433ae371176cd81b34e3bc5a72852b238f6b7ed98610e3259831389eacd7990ff248d7c890b87a93a4afcdeb4f287d1f631b
+AUX clsync-0.4-retries-arg.patch 563 SHA256 d846c0e0e33280ec24c8e20e4006d72746a39a5f4b92fcdb272bf5abdc16fef8 SHA512 14fa4bdf092dbbce8f2ed246a3746c6d590e3f728a70c103a29f956485c3ac223c5cbf9bb4d5e72f0e7cfa08ffaa86fb63812b6f7972a2b29ef8da195e8b9944 WHIRLPOOL 988fb71f5a51ce423f0e78e33f6a71b5cfcd7f4098eee0990745d1ae472c4aa8b1cd709b6dbe7f56069f3ddf235dac97aef7f0ce62c36ee707268b84c7f0939b
+AUX clsync-0.4-strtol.patch 5902 SHA256 04245b1711daa28d883b63e0f0778e60121a6841ffef49e219a62f9816149421 SHA512 930f36dc99b1c2e121c63ad5a6c4aa07f2025261f76522c635a63e4370dd2c225ffb7ca10179bb364e2668d0d4eed1f42e8d497bb03a3f8a7a94f76a951e7781 WHIRLPOOL 565b0e5e6cb6a0e72ff7a4e72c4a586401e9352ebd347cca2b34e8ea87d078f2cebd69a10c2b3e3bb3e8dfa907ef059b3c0b47e0c8677a7f365b9174448a2f45
AUX clsync-0.4-unset_env.patch 1820 SHA256 830f7d495be48faa1b13ae9794371561808dd904cb45192e40f790b33dc32475 SHA512 e89bd1834180487bb0feecfbac90a6512531547fbaa3053fe9907e776a2212e5dc0f912c7a59bccf9f15058d991dbe03f9ae7c89a741d6807c9df4fa930af915 WHIRLPOOL b058e0a41535770c81232e4587856f69e152dbae1683929c7fa3bf171db7d76cd67456bf4e2fe3e2902da6d72ba2720990247eac8a3fef6c8ae250004eee2fd3
AUX clsync-0.4-unshare-configure.patch 1198 SHA256 c60e2f8e33e1ca04d27e8887982d83eb5efb8a3f3f6871f97feba931aaa0db74 SHA512 c0be6a085a33e3c09bfe52fc5aff3a1136fbbdde7cf928bd1ff21c7e435ae8562a626ed7d561c83e74580f17e2ad1c61be778d0a7f01b2ad0890a9d5cc1e54cd WHIRLPOOL 826d597da90d8f71b3ff902c5c55bbd3ae82bae33157f99469bfe8dec4ad93f16a1f2d10c0b78f561c58f6d01832ed2bbc2267ab619e21bd19c939034ae8b401
AUX clsync-0.4-unshare-ifdef.patch 989 SHA256 2fc98fa742ed24068af39c950eb7fa33a048a2cbb3aab44b074928cd86c5cefb SHA512 2a6e98a2ea8d1dd663fdaf6eed0d6706c61b646c4178ca8be5598d1d6a3dd8023b92f02858f7324c5ceab601ed5c8ec1ee6bcc7210664cd57dc281a116bbde3c WHIRLPOOL 9535ac8e746e4ce980d4f17c05f554e55f5ab717d79e20ba09751f176383e46c2b52777cccce10f28422b4d459f0ef8c8a5f900c4857994a8bab5c6108bd5e27
AUX clsync.confd 645 SHA256 ae7e9cacf618f9a32a4a1580580a901831aaaa0abb9de9e0379fbcc6a7359b0d SHA512 75dcc49d51f6da94d42eb501f1ad2868f163405dd7aa933f4c8078ec18f5b54eb6c66ff796ee744f7751699162627af843edbe5de5adf99c23712cedaebaddc5 WHIRLPOOL 06289c7645430d10b242983daa9cd2d4c2f327b34ede308012354947c64c654a7864586743ae6de7c02770a8b1c22de04b63404a6431b317b328ac6ac1e121ce
AUX clsync.initd 671 SHA256 1efaac7d85e4f22e3b346af1451cac8574549743df7460feb664d4e57d818234 SHA512 61e8ca7f1e04cb2ff4d3e374c9419112bc05e6ffa77b40505f5a5ad7e215d8d5c2961795b804afd19ec153945bc004bf0611cb15e1ffae44746c6877805d967a WHIRLPOOL c605b0cb37e4bfac4fbb652d560515df9890d872e10616d2b039898d382abbcc8a5c6185f8556ac32d7d9e77198cc15d53490e33403a14fa5b9a6b656b912a29
DIST clsync-0.4.tar.gz 253396 SHA256 6f0ce7a5f61fbb50db53b787b62cf5347870f3be315acb02c4aee6b76206d19e SHA512 9b17f5f8f0bfc48531f3d8cb4f1c1edd3116e0b7d140e8ab2465dd1c590521c9857202ed3f36466f13fb3309abb9232fb4acbe25b5652914a816fac498f74a48 WHIRLPOOL 18ae12df2d7e0403b21c5d4ab7352cd81446729d94fb300a799b98dad9f88aeaa98deb2ba5f52858d3b6ba7406d777e53e97dae5c3a4802a229511db9c8a3482
+EBUILD clsync-0.4-r1.ebuild 3457 SHA256 4303d9a9a12aa718994bc2ff98598a481ea3436fed71f2c82a5c8787b66fc024 SHA512 9e22522f2c1d5bbd694794c5cf27716ab2e138b30e770d4af16e26d1274d5a18ab2da1172fa938a3faec2691c04560736d64cb999428773bff64ad1b428e9606 WHIRLPOOL 3c3b37004e5509effbe80ca490798335001590e89688b49319e9d51e7a7f118ef3251cf8af5154a3172be843bfe179318bab0d7a992bb4d0b136797739cff8f3
EBUILD clsync-0.4.ebuild 3377 SHA256 5faa09012d163d4a25e27c3c8b50d2e5ebbf551dfdc9fe809c24f289edf4a9dd SHA512 abcca419225b6c446555abf99b86760c716397842d7c02d9ecaa22774edd03b9f2739c6b5325d3646914264fad4e44e4047fafabfd8e0f17a43aff8bd3813b68 WHIRLPOOL c96c4196b7935013a1291c3a952f8d8fcd6618a06bfcaa2f4cf1b7bddcc9e0a65ab370d0a79f371bb6da60c8c47e692a1428c89cd93a7f63670d246d7d6202f3
-MISC ChangeLog 767 SHA256 27efaf9b27065358c2c7c3a9b0a05a42878c80dfe46f0e29e02113538b5960ef SHA512 623d87b0fe6aec6ec9adc3e4c0c4b50a1093e99b9b6bddd3289afc3250d71e445fff4a98ed08d29b3b86b5637b1b40ce46403a396043374b2f1b680d5df60174 WHIRLPOOL 4fef9820eadcd44d78de738148690fd54cf77d07b6b307b96ca4e2f2ead7dc2012ea96a5859f4f461dfa6f95e61c8b4aec600e415ad5ec97949f7ab07997e5fa
+MISC ChangeLog 984 SHA256 5cab71457af3378766c098cc87c15db328111bd38bb240097c1cdb5fdf594c0f SHA512 17a422ff074b7dfaef747ab3ad032000347890af58d434811f921903ef904f9e9ee3b815caa840ed4c639b222d9894a021b90a120731aef612ad4ce62fc4dd46 WHIRLPOOL 14c9493423b49652edc8c45b8db04711ff2e06f7e5fc0655c98687cbaba6d6f0046c61dbdff3d545dc43a0dd3fc140ddb37386a101cd3cf84ac3b86ab8cfd577
MISC metadata.xml 1572 SHA256 6d90b9c0f0b37dffda05a9b5ca6d02f05ce0362eb8bf8fbe19e90c3f77570940 SHA512 5be148bc1f8b1ca76e2b5713bf5a9ecfc88c4c101620fbbf1cb4efcbe7b33a923038ea0c2d5b2d66689552a04b865c4b0625887baa98a80d64f486208143ce67 WHIRLPOOL e1cd84b85b5ac476407930f14217cfed16f67d3aeb221e61dffa94c688b69ada4f29f7a7e9f4f2b610f8730c10d700bff9148d6b871ca9d98e76eaa0c5de68c8
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
-iQIcBAEBCAAGBQJU2s7tAAoJEPZTWjO6HuSN6FYP/1Re+RHhoAZXdJ1kEatu6Kfw
-rmcy8A0qJk2S12Jszy+E1m2JCy4kEr9e5yc9+xsAOcG5nyCQWsbHg7TxrfLP9gao
-DqiE0M+GS36pmtVjnRoh/upJRrnSTwL9b4cQyyopgMgFp59s8ea7gPuL1ZixkQ5N
-6poAQQTLurpzV0Mw6lPkMLbubQyXByExP8wz/Fzeuq2X6svSOxXYVB9wcwD5mk8r
-9S6FiZuTqA6Rhfahdn6ZXdQbLFgkzMRg/r7/b+o0Bpi8whmEekmbXYqq3cdT9rZy
-7JkHQ/V+0IpJTAbH29y8lL+sdezySN4h555sTFqBCQjrak0C+lAdX1DzPQjlPq6i
-2+L5Cc81Ru2jFYPaQDiQ7bW8pL8xNzEYDWXN4OD1SQMZzw7ux2/hg3qRmMkNw8JJ
-S/Ij03ThTVUUVJ4QfcI7rUb1GBgx7Smx4sm9I/p0C73VBPzEiGLB+XeKKC0rxJYo
-aDOzTdxlrUWjs+KrlJA3i5cycW5XqFBV8zpZ/hGXkOWXz+iVnbkoeEt/nFs9SjUS
-TAHjlRec9p5IRw6pi68NIT/PcmVIN4nn2AuIRKN8SJYx989+wLMbuJj0lgeF8MWk
-Cz8IxPU8YO7imG1z8yJJxSolXa9S0yI38j4Ojl679eiTtsE097fIQ7aBLhLCFjza
-nI6GvRJ9yxbVr1rPPbbE
-=W/gP
+iQIcBAEBCAAGBQJU537CAAoJEPZTWjO6HuSNNlEQALxU+wcYxWWc9LKH0oyTw6zQ
+UJdgpgWqW6E8OwHntVqyQ5EUP3XuplakxC/s3UIyvUhs1M679WE9p4Nw7O+qzAn1
+sq0eVWculDHs5p8GRLzyzsI6DQL8O6AUjND/YJsmLBtJMc4JKpvCkaQrcW+49+2B
+psLjEgHbrKB2gwwKIYbFlzi6fOIBw1j9Z2LLxVVjFxZ4fzm7KZwv58cVZO/WDuI4
+rsqLgntARao5ArrcS5a4XjNLNT7u3wMHioS13Vi3Q1byZfYjGRYbMq+mLf2/8+nb
+2OHG04TTfehTPKnr1ZOWW9ekfXr0T+Nf8bSop1uUAq6lnHtHC4mR4p9SyLHNvLrk
+6JQyaZpApHALoF0sNVMfXUy1oP4ozt5jYRSi555FN2Njgf+aAQkbN0MYZk+W0ILB
+9mZvsRX6gQwD8IQ6V7AGUjhGmFll3Mxpu7yrj/XgUfYnvMIndtUSRkB5M58Vw0nV
+oB8O7sYTcXSnGNHXIFHF53CIkS0tkdbtzfceGKJrB4vLHhEB14LE86qnTFbfPSG3
+M8fZe9L/It5S1LACUVSLTKqQ04iTNgHNk7AKPVR1f2aUJMkUAZu+XLKxkXVaVZuW
+Djybvfn4kR7hpD/Zl/MQ3Gg0iIYngUn2NoXpbn8ohqheiAAss2aUohR7ScHMfYML
+8NNXU8rdhSxlN6/81wNU
+=hYOF
-----END PGP SIGNATURE-----
--- /dev/null
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-admin/clsync/clsync-0.4-r1.ebuild,v 1.1 2015/02/20 18:36:49 bircoph Exp $
+
+EAPI=5
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/xaionaro/${PN}.git"
+else
+ SRC_URI="https://github.com/xaionaro/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+inherit autotools eutils linux-info
+
+DESCRIPTION="Live sync tool based on inotify, written in GNU C"
+HOMEPAGE="https://github.com/xaionaro/clsync http://ut.mephi.ru/oss/clsync"
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="+caps cluster control-socket cgroups debug doc +examples
+extra-hardened gio hardened +highload-locks +inotify mhash
+namespaces seccomp"
+
+REQUIRED_USE="
+ || ( gio inotify )
+ extra-hardened? ( hardened )
+ mhash? ( cluster )"
+
+RDEPEND="
+ dev-libs/glib:2
+ cgroups? ( dev-libs/libcgroup )
+ mhash? ( app-crypt/mhash )
+"
+DEPEND="${RDEPEND}
+ virtual/pkgconfig
+ doc? ( ~app-doc/clsync-docs-${PV} )
+"
+
+pkg_pretend() {
+ use namespaces && CONFIG_CHECK="~NAMESPACES ~UTS_NS ~IPC_NS ~USER_NS ~PID_NS ~NET_NS"
+ use seccomp && CONFIG_CHECK+=" ~SECCOMP"
+ check_extra_config
+}
+
+src_prepare() {
+ # upstream fixes for 0.4
+ epatch \
+ "${FILESDIR}/${P}-gio.patch" \
+ "${FILESDIR}/${P}-unshare-configure.patch" \
+ "${FILESDIR}/${P}-unshare-ifdef.patch" \
+ "${FILESDIR}/${P}-version.patch" \
+ "${FILESDIR}/${P}-direct_mode.patch" \
+ "${FILESDIR}/${P}-handler_path.patch" \
+ "${FILESDIR}/${P}-hl_locks.patch" \
+ "${FILESDIR}/${P}-unset_env.patch" \
+ "${FILESDIR}/${P}-unused-deps.patch" \
+ "${FILESDIR}/${P}-retries-arg.patch" \
+ "${FILESDIR}/${P}-strtol.patch"
+ eautoreconf
+}
+
+src_configure() {
+ local harden_level=0
+ use hardened && harden_level=1
+ use extra-hardened && harden_level=2
+
+ econf \
+ --docdir="${EPREFIX}/usr/share/doc/${PF}" \
+ --disable-socket-library \
+ --enable-clsync \
+ --enable-paranoid=${harden_level} \
+ --without-bsm \
+ --without-kqueue \
+ $(use_enable caps capabilities) \
+ $(use_enable cluster) \
+ $(use_enable control-socket socket) \
+ $(use_enable debug) \
+ $(use_enable highload-locks) \
+ $(use_enable namespaces unshare) \
+ $(use_enable seccomp) \
+ $(use_with cgroups libcgroup) \
+ $(use_with gio gio lib) \
+ $(use_with inotify inotify native) \
+ $(use_with mhash)
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+
+ # remove unwanted docs
+ rm "${ED}/usr/share/doc/${PF}/LICENSE" || die "failed to cleanup docs"
+ use examples || rm -r "${ED}/usr/share/doc/${PF}/examples" || die "failed to remove examples"
+
+ newinitd "${FILESDIR}/${PN}.initd" "${PN}"
+ newconfd "${FILESDIR}/${PN}.confd" "${PN}"
+
+ # filter rules and sync scripts are supposed to be here
+ keepdir "${EPREFIX}/etc/${PN}"
+ insinto "/etc/${PN}"
+ newins "${FILESDIR}/${PN}.conf" "${PN}.conf"
+}
+
+pkg_postinst() {
+ einfo "${PN} is just a convenient way to run synchronization tools on live data,"
+ einfo "it doesn't copy data itself, so you need to install software to do actual"
+ einfo "data transfer. Usually net-misc/rsync is a good choise, but ${PN} is"
+ einfo "is flexible enough to use any user tool, see manual page for details."
+ einfo
+ einfo "${PN} init script can be multiplexed, to use symlink init script to"
+ einfo "othername and use conf.d/othername to configure it."
+ einfo
+ einfo "If you're interested in improved security, enable"
+ einfo "USE=\"caps cgroups hardened namespaces seccomp\""
+}
--- /dev/null
+diff --git a/main.c b/main.c
+index 176e1f4..48aee6a 100644
+--- a/main.c
++++ b/main.c
+@@ -116,7 +116,7 @@ static const struct option long_options[] =
+ {"cgroup-group-name", required_argument, NULL, CG_GROUPNAME},
+ #endif
+ {"threading", required_argument, NULL, THREADING},
+- {"retries", optional_argument, NULL, RETRIES},
++ {"retries", required_argument, NULL, RETRIES},
+ {"ignore-failures", optional_argument, NULL, IGNOREFAILURES},
+ {"exit-on-sync-skipping",optional_argument, NULL, EXITONSYNCSKIP},
+ {"output", required_argument, NULL, OUTPUT_METHOD},
--- /dev/null
+commit 41283d1359b652c728ca37406a33e62e8541bdda
+Author: Andrew Savchenko <bircoph@gmail.com>
+Date: Fri Feb 20 21:04:48 2015 +0300
+
+ parser: check correctness of str to int conversions.
+
+diff --git a/main.c b/main.c
+index 48aee6a..d057489 100644
+--- a/main.c
++++ b/main.c
+@@ -808,15 +808,33 @@ static int synchandler_arg1(char *arg, size_t arg_len, void *_ctx_p) {
+ return synchandler_arg(arg, arg_len, _ctx_p, SHARGS_INITIAL);
+ }
+
+-int parse_customsignals(ctx_t *ctx_p, char *arg) {
++/* strtol wrapper with error checks */
++static inline long xstrtol(const char *str, int *err) {
++ long res;
++ char *endptr;
++
++ res = strtol(str, &endptr, 0);
++ if (errno || *endptr) {
++ error("argument \"%s\" can't be parsed as a number", str);
++ *err = EINVAL;
++ }
++ return res;
++}
++
++static inline int parse_customsignals(ctx_t *ctx_p, char *arg) {
+ char *ptr = arg, *start = arg;
++ int ret = 0;
+ unsigned int signal;
+ do {
+ switch (*ptr) {
+ case 0:
+ case ',':
+ case ':':
+- signal = (unsigned int)atoi(start);
++ signal = (unsigned int)xstrtol(start, &ret);
++ if (ret) {
++ errno = ret;
++ return errno;
++ }
+ if (signal == 0) {
+ // flushing the setting
+ int i = 0;
+@@ -883,7 +901,8 @@ int parse_customsignals(ctx_t *ctx_p, char *arg) {
+ return 0;
+ }
+
+-int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t paramsource) {
++static int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t paramsource) {
++ int ret = 0;
+ #ifdef _DEBUG_FORCE
+ fprintf(stderr, "Force-Debug: parse_parameter(): %i: %i = \"%s\"\n", paramsource, param_id, arg);
+ #endif
+@@ -962,7 +981,7 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ ctx_p->flags[param_id]++;
+
+ if (pwd == NULL) {
+- ctx_p->uid = (unsigned int)atol(arg);
++ ctx_p->uid = (unsigned int)xstrtol(arg, &ret);
+ break;
+ }
+
+@@ -974,7 +993,7 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ ctx_p->flags[param_id]++;
+
+ if (grp == NULL) {
+- ctx_p->gid = (unsigned int)atol(arg);
++ ctx_p->gid = (unsigned int)xstrtol(arg, &ret);
+ break;
+ }
+
+@@ -1028,7 +1047,7 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ ctx_p->flags[param_id]++;
+
+ if (pwd == NULL) {
+- ctx_p->synchandler_uid = (unsigned int)atol(arg);
++ ctx_p->synchandler_uid = (unsigned int)xstrtol(arg, &ret);
+ break;
+ }
+
+@@ -1040,7 +1059,7 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ ctx_p->flags[param_id]++;
+
+ if (grp == NULL) {
+- ctx_p->synchandler_gid = (unsigned int)atol(arg);
++ ctx_p->synchandler_gid = (unsigned int)xstrtol(arg, &ret);
+ break;
+ }
+
+@@ -1233,7 +1252,7 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ ctx_p->pidfile = arg;
+ break;
+ case RETRIES:
+- ctx_p->retries = (unsigned int)atol(arg);
++ ctx_p->retries = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case THREADING: {
+ char *value, *arg_orig = arg;
+@@ -1279,22 +1298,22 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ ctx_p->cluster_mcastipaddr = arg;
+ break;
+ case CLUSTERMCASTIPPORT:
+- ctx_p->cluster_mcastipport = (uint16_t)atoi(arg);
++ ctx_p->cluster_mcastipport = (uint16_t)xstrtol(arg, &ret);
+ break;
+ case CLUSTERTIMEOUT:
+- ctx_p->cluster_timeout = (unsigned int)atol(arg);
++ ctx_p->cluster_timeout = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case CLUSTERNODENAME:
+ ctx_p->cluster_nodename = arg;
+ break;
+ case CLUSTERHDLMIN:
+- ctx_p->cluster_hash_dl_min = (uint16_t)atoi(arg);
++ ctx_p->cluster_hash_dl_min = (uint16_t)xstrtol(arg, &ret);
+ break;
+ case CLUSTERHDLMAX:
+- ctx_p->cluster_hash_dl_max = (uint16_t)atoi(arg);
++ ctx_p->cluster_hash_dl_max = (uint16_t)xstrtol(arg, &ret);
+ break;
+ case CLUSTERSDLMAX:
+- ctx_p->cluster_scan_dl_max = (uint16_t)atoi(arg);
++ ctx_p->cluster_scan_dl_max = (uint16_t)xstrtol(arg, &ret);
+ break;
+ #endif
+ case OUTLISTSDIR:
+@@ -1334,16 +1353,16 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ break;
+ }
+ case SYNCDELAY:
+- ctx_p->syncdelay = (unsigned int)atol(arg);
++ ctx_p->syncdelay = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case DELAY:
+- ctx_p->_queues[QUEUE_NORMAL].collectdelay = (unsigned int)atol(arg);
++ ctx_p->_queues[QUEUE_NORMAL].collectdelay = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case BFILEDELAY:
+- ctx_p->_queues[QUEUE_BIGFILE].collectdelay = (unsigned int)atol(arg);
++ ctx_p->_queues[QUEUE_BIGFILE].collectdelay = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case BFILETHRESHOLD:
+- ctx_p->bfilethreshold = (unsigned long)atol(arg);
++ ctx_p->bfilethreshold = (unsigned long)xstrtol(arg, &ret);
+ break;
+ case CANCEL_SYSCALLS: {
+ char *subopts = arg;
+@@ -1412,10 +1431,10 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ break;
+ }
+ case RSYNCINCLIMIT:
+- ctx_p->rsyncinclimit = (unsigned int)atol(arg);
++ ctx_p->rsyncinclimit = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case SYNCTIMEOUT:
+- ctx_p->synctimeout = (unsigned int)atol(arg);
++ ctx_p->synctimeout = (unsigned int)xstrtol(arg, &ret);
+ break;
+ case PREEXITHOOK:
+ if (strlen(arg)) {
+@@ -1611,13 +1630,13 @@ int parse_parameter(ctx_t *ctx_p, uint16_t param_id, char *arg, paramsource_t pa
+ if (arg == NULL)
+ ctx_p->flags[param_id]++;
+ else
+- ctx_p->flags[param_id] = atoi(arg);
++ ctx_p->flags[param_id] = xstrtol(arg, &ret);
+ #ifdef _DEBUG_FORCE
+ fprintf(stderr, "Force-Debug: flag %i is set to %i\n", param_id&0xff, ctx_p->flags[param_id]);
+ #endif
+ break;
+ }
+- return 0;
++ return ret;
+ }
+
+ int arguments_parse(int argc, char *argv[], struct ctx *ctx_p) {