aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_servicedir_internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6rc/s6rc_servicedir_internal.c')
-rw-r--r--src/libs6rc/s6rc_servicedir_internal.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/libs6rc/s6rc_servicedir_internal.c b/src/libs6rc/s6rc_servicedir_internal.c
index e81f378..5c55d28 100644
--- a/src/libs6rc/s6rc_servicedir_internal.c
+++ b/src/libs6rc/s6rc_servicedir_internal.c
@@ -27,7 +27,7 @@ static s6_servicedir_desc const svdir_file_list[] =
{ .name = "down-signal", .type = S6_FILETYPE_NORMAL, .options = 0 },
{ .name = "reload-signal", .type = S6_FILETYPE_NORMAL, .options = 0 },
{ .name = "flag-newpidns", .type = S6_FILETYPE_EMPTY, .options = 0 },
- { .name = "template", .type = S6_FILETYPE_DIR, .options = 0 },
+ { .name = "template", .type = S6_FILETYPE_TEMPLATE, .options = 0 },
{ .name = "data", .type = S6_FILETYPE_DIR, .options = 0 },
{ .name = "env", .type = S6_FILETYPE_DIR, .options = 0 },
{ .name = 0, .options = 0 }
@@ -61,7 +61,7 @@ int s6rc_servicedir_copy_one (char const *src, char const *dst, s6_servicedir_de
break ;
}
case S6_FILETYPE_EMPTY :
- if (access(srcfn, F_OK) < 0)
+ if (access(srcfn, F_OK) == -1)
{
if (errno != ENOENT || p->options & S6_SVFILE_MANDATORY) return 0 ;
}
@@ -81,16 +81,17 @@ int s6rc_servicedir_copy_one (char const *src, char const *dst, s6_servicedir_de
}
break ;
}
+ case S6_FILETYPE_TEMPLATE :
case S6_FILETYPE_DIR :
if (!hiercopy(srcfn, dstfn))
{
- if (errno != ENOENT || p->options & S6_SVFILE_MANDATORY) return 0 ;
- }
- if (!strcmp(p->name, "template"))
- {
- memcpy(dstfn + dstlen + 1, "instance", 9) ;
- if (mkdir(dstfn, 0755) == -1 && errno != EEXIST) return 0 ;
+ if (errno != ENOENT) return 0 ;
+ if (p->options & S6_SVFILE_MANDATORY) return 0 ;
+ break ;
}
+ if (p->type != S6_FILETYPE_TEMPLATE) break ;
+ memcpy(dstfn + dstlen + 1, "instance", 9) ;
+ if (mkdir(dstfn, 0755) == -1 && errno != EEXIST) return 0 ;
break ;
default : return (errno = EDOM, 0) ;
}