assert(service);
assert(alias);
- if (streq(service, alias)) {
- log_error("Ignoring creation of an alias %s for itself", service);
- return 0;
- }
-
link = strjoin(arg_dest, "/", alias, NULL);
if (!link)
return log_oom();
/* strip ".sh" suffix from file name for comparison */
filename_no_sh = strdupa(filename);
- e = endswith(filename, ".sh");
+ e = endswith(filename_no_sh, ".sh");
if (e) {
*e = '\0';
filename = filename_no_sh;
/* Facilities starting with $ are most likely targets */
r = unit_name_build(n, NULL, ".target");
- } else if (filename && streq(name, filename))
+ } else if (streq_ptr(n, filename))
/* Names equaling the file name of the services are redundant */
return 0;
else
/* Everything else we assume to be normal service names */
r = sysv_translate_name(n);
-
if (!r)
return -ENOMEM;
struct stat st;
int r;
- dirent_ensure_type(d, de);
-
- if (!dirent_is_file(de))
- continue;
+ if (hidden_file(de->d_name))
+ continue;
- if (fstatat(dirfd(d), de->d_name, &st, 0) < 0) {
+ if (fstatat(dirfd(d), de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0) {
log_warning_errno(errno, "stat() failed on %s/%s: %m", *path, de->d_name);
continue;
}
if (!name)
return log_oom();
+ if (hashmap_contains(all_services, name))
+ continue;
+
fpath = strjoin(*path, "/", de->d_name, NULL);
if (!fpath)
return log_oom();
- if (hashmap_contains(all_services, name))
+ if (unit_file_get_state(UNIT_FILE_SYSTEM, NULL, name) >= 0) {
+ log_debug("Native unit for %s already exists, skipping", name);
continue;
+ }
service = new0(SysvStub, 1);
if (!service)
service = hashmap_get(all_services, name);
if (!service){
- log_warning("Could not find init script for %s", name);
+ log_debug("Ignoring %s symlink in %s, not generating %s.",
+ de->d_name, rcnd_table[i].path, name);
continue;
}