lopsub must be installed to compile this package. Also help2man is
no longer required since lopsub has built-in roff support.
+ - New subcommand "configtest" to check the command line options and
+ the configuration file for syntactic correctness.
+
++ - New option: --mountpoint. If this option is given, dss aborts if
++ no file system is mounted on the destination directory.
++
- "make install" will install the executable and the man page.
- In run mode, dss no longer exits successfully if another instance
{
int ret;
const char *dd = OPT_STRING_VAL(DSS, DEST_DIR);
+ struct stat dot, dotdot;
DSS_INFO_LOG(("changing cwd to %s\n", dd));
- if (chdir(dd) >= 0)
- return 1;
- ret = -ERRNO_TO_DSS_ERROR(errno);
- DSS_ERROR_LOG(("could not change cwd to %s\n", dd));
- return ret;
+ if (chdir(dd) < 0) {
+ ret = -ERRNO_TO_DSS_ERROR(errno);
+ DSS_ERROR_LOG(("could not change cwd to %s\n", dd));
+ return ret;
+ }
+ if (!OPT_GIVEN(DSS, MOUNTPOINT))
+ return 0;
+ if (stat(".", &dot) < 0) {
+ ret = -ERRNO_TO_DSS_ERROR(errno);
+ DSS_ERROR_LOG(("could not stat .\n"));
+ return ret;
+ }
+ if (stat("..", &dotdot) < 0) {
+ ret = -ERRNO_TO_DSS_ERROR(errno);
+ DSS_ERROR_LOG(("could not stat ..\n"));
+ return ret;
+ }
+ if (dot.st_dev == dotdot.st_dev && dot.st_ino != dotdot.st_ino) {
+ DSS_ERROR_LOG(("mountpoint check failed for %s\n", dd));
+ return -E_MOUNTPOINT;
+ }
+ return 1;
}
-static int check_config(const struct lls_command *cmd)
+static int check_config(void)
{
int ret;
uint32_t unit_interval = OPT_UINT32_VAL(DSS, UNIT_INTERVAL);