chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sysv-generator: use is_symlink() utility call where appropriate
[elogind.git]
/
src
/
sysv-generator
/
sysv-generator.c
diff --git
a/src/sysv-generator/sysv-generator.c
b/src/sysv-generator/sysv-generator.c
index 3279c7f44482ef6f0e2ead2a17b25e4de985df8f..984beab70ad397ed5760dd4e2cc00d64b3095c9d 100644
(file)
--- a/
src/sysv-generator/sysv-generator.c
+++ b/
src/sysv-generator/sysv-generator.c
@@
-147,7
+147,6
@@
static int generate_unit_file(SysvStub *s) {
_cleanup_free_ char *wants = NULL;
_cleanup_free_ char *conflicts = NULL;
int r;
_cleanup_free_ char *wants = NULL;
_cleanup_free_ char *conflicts = NULL;
int r;
- struct stat st;
before = strv_join(s->before, " ");
if (!before)
before = strv_join(s->before, " ");
if (!before)
@@
-172,9
+171,9
@@
static int generate_unit_file(SysvStub *s) {
/* We might already have a symlink with the same name from a Provides:,
* or from backup files like /etc/init.d/foo.bak. Real scripts always win,
* so remove an existing link */
/* We might already have a symlink with the same name from a Provides:,
* or from backup files like /etc/init.d/foo.bak. Real scripts always win,
* so remove an existing link */
- if (
lstat(unit, &st) == 0 && S_ISLNK(st.st_mode
)) {
+ if (
is_symlink(unit
)) {
log_warning("Overwriting existing symlink %s with real service", unit);
log_warning("Overwriting existing symlink %s with real service", unit);
- unlink(unit);
+
(void)
unlink(unit);
}
f = fopen(unit, "wxe");
}
f = fopen(unit, "wxe");
@@
-274,10
+273,9
@@
static int sysv_translate_facility(const char *name, const char *filename, char
"time", SPECIAL_TIME_SYNC_TARGET,
};
"time", SPECIAL_TIME_SYNC_TARGET,
};
- unsigned i;
- char *r;
+ char *filename_no_sh, *e, *r;
const char *n;
const char *n;
-
_cleanup_free_ char *filename_no_sh = NULL
;
+
unsigned i
;
assert(name);
assert(_r);
assert(name);
assert(_r);
@@
-300,11
+298,12
@@
static int sysv_translate_facility(const char *name, const char *filename, char
}
/* strip ".sh" suffix from file name for comparison */
}
/* strip ".sh" suffix from file name for comparison */
- filename_no_sh = strdup(filename);
- if (!filename_no_sh)
- return -ENOMEM;
- if (endswith(filename, ".sh"))
- filename_no_sh[strlen(filename)-3] = '\0';
+ filename_no_sh = strdupa(filename);
+ e = endswith(filename, ".sh");
+ if (e) {
+ *e = '\0';
+ filename = filename_no_sh;
+ }
/* If we don't know this name, fallback heuristics to figure
* out whether something is a target or a service alias. */
/* If we don't know this name, fallback heuristics to figure
* out whether something is a target or a service alias. */
@@
-315,7
+314,7
@@
static int sysv_translate_facility(const char *name, const char *filename, char
/* Facilities starting with $ are most likely targets */
r = unit_name_build(n, NULL, ".target");
/* Facilities starting with $ are most likely targets */
r = unit_name_build(n, NULL, ".target");
- } else if (filename && streq(name, filename
_no_sh
))
+ } else if (filename && streq(name, filename))
/* Names equaling the file name of the services are redundant */
return 0;
else
/* Names equaling the file name of the services are redundant */
return 0;
else
@@
-495,10
+494,8
@@
static int load_sysv(SysvStub *s) {
return -ENOMEM;
r = sysv_translate_facility(n, basename(s->path), &m);
return -ENOMEM;
r = sysv_translate_facility(n, basename(s->path), &m);
-
if (r < 0)
return r;
if (r < 0)
return r;
-
if (r == 0)
continue;
if (r == 0)
continue;
@@
-752,8
+749,10
@@
static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
struct stat st;
int r;
struct stat st;
int r;
- if (hidden_file(de->d_name))
- continue;
+ dirent_ensure_type(d, de);
+
+ if (!dirent_is_file(de))
+ continue;
if (fstatat(dirfd(d), de->d_name, &st, 0) < 0) {
log_warning_errno(errno, "stat() failed on %s/%s: %m", *path, de->d_name);
if (fstatat(dirfd(d), de->d_name, &st, 0) < 0) {
log_warning_errno(errno, "stat() failed on %s/%s: %m", *path, de->d_name);