chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
service: don't read start priority from Kxx link
[elogind.git]
/
util.c
diff --git
a/util.c
b/util.c
index 83e819a0cb769decb718148ab02af4a3bb9b8f61..8556ea12cd153d6899f3b98a8cc803e80b61f401 100644
(file)
--- a/
util.c
+++ b/
util.c
@@
-114,6
+114,9
@@
bool endswith(const char *s, const char *postfix) {
sl = strlen(s);
pl = strlen(postfix);
sl = strlen(s);
pl = strlen(postfix);
+ if (pl == 0)
+ return true;
+
if (sl < pl)
return false;
if (sl < pl)
return false;
@@
-129,6
+132,9
@@
bool startswith(const char *s, const char *prefix) {
sl = strlen(s);
pl = strlen(prefix);
sl = strlen(s);
pl = strlen(prefix);
+ if (pl == 0)
+ return true;
+
if (sl < pl)
return false;
if (sl < pl)
return false;
@@
-147,11
+153,14
@@
bool first_word(const char *s, const char *word) {
if (sl < wl)
return false;
if (sl < wl)
return false;
+ if (wl == 0)
+ return true;
+
if (memcmp(s, word, wl) != 0)
return false;
if (memcmp(s, word, wl) != 0)
return false;
- return
(
s[wl] == 0 ||
- strchr(WHITESPACE, s[wl])
)
;
+ return s[wl] == 0 ||
+ strchr(WHITESPACE, s[wl]);
}
int close_nointr(int fd) {
}
int close_nointr(int fd) {
@@
-1420,10
+1429,14
@@
int ask(char *ret, const char *replies, const char *text, ...) {
int r;
bool need_nl = true;
int r;
bool need_nl = true;
+ fputs("\x1B[1m", stdout);
+
va_start(ap, text);
vprintf(text, ap);
va_end(ap);
va_start(ap, text);
vprintf(text, ap);
va_end(ap);
+ fputs("\x1B[0m", stdout);
+
fflush(stdout);
if ((r = read_one_char(stdin, &c, &need_nl)) < 0) {
fflush(stdout);
if ((r = read_one_char(stdin, &c, &need_nl)) < 0) {
@@
-1664,13
+1677,24
@@
fail:
int release_terminal(void) {
int r = 0, fd;
int release_terminal(void) {
int r = 0, fd;
+ struct sigaction sa_old, sa_new;
- if ((fd = open("/dev/tty", O_RDWR)) < 0)
+ if ((fd = open("/dev/tty", O_RDWR
|O_NOCTTY|O_NDELAY
)) < 0)
return -errno;
return -errno;
+ /* Temporarily ignore SIGHUP, so that we don't get SIGHUP'ed
+ * by our own TIOCNOTTY */
+
+ zero(sa_new);
+ sa_new.sa_handler = SIG_IGN;
+ sa_new.sa_flags = SA_RESTART;
+ assert_se(sigaction(SIGHUP, &sa_new, &sa_old) == 0);
+
if (ioctl(fd, TIOCNOTTY) < 0)
r = -errno;
if (ioctl(fd, TIOCNOTTY) < 0)
r = -errno;
+ assert_se(sigaction(SIGHUP, &sa_old, NULL) == 0);
+
close_nointr_nofail(fd);
return r;
}
close_nointr_nofail(fd);
return r;
}