summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-03-03 18:10:29 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-03-03 18:10:29 +0100
commit6d768d603aaeb5f912086c3068331fcc88aa5340 (patch)
tree6aba1d07f050af7f5045e0273730b054bbcd7404 /src/lib
parent28a7bf1a5432f7e9af4661dc3032b411b7d8f1b0 (diff)
gui-wizard-gtk: fix stealing again
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/dump_dir.c33
-rw-r--r--src/lib/run_event.c4
2 files changed, 18 insertions, 19 deletions
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index a84e2814..d0b1d478 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -111,7 +111,7 @@ static bool exist_file_dir(const char *path)
}
/* Return values:
- * -1: error
+ * -1: error (in this case, errno is 0 if error message is already logged)
* 0: failed to lock (someone else has it locked)
* 1: success
*/
@@ -121,8 +121,11 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
{
if (errno != EEXIST)
{
- if (errno != ENOENT && errno != ENOTDIR)
+ if (errno != ENOENT && errno != ENOTDIR && errno != EACCES)
+ {
perror_msg("Can't create lock file '%s'", lock_file);
+ errno = 0;
+ }
return -1;
}
@@ -137,6 +140,7 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
continue;
}
perror_msg("Can't read lock file '%s'", lock_file);
+ errno = 0;
return -1;
}
pid_buf[r] = '\0';
@@ -161,6 +165,7 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
if (unlink(lock_file) != 0 && errno != ENOENT)
{
perror_msg("Can't remove stale lock file '%s'", lock_file);
+ errno = 0;
return -1;
}
}
@@ -169,7 +174,7 @@ static int get_and_set_lock(const char* lock_file, const char* pid)
return 1;
}
-static int dd_lock(struct dump_dir *dd, unsigned sleep_usec)
+static int dd_lock(struct dump_dir *dd, unsigned sleep_usec, int flags)
{
if (dd->locked)
error_msg_and_die("Locking bug on '%s'", dd->dd_dirname);
@@ -283,7 +288,7 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
dir = dd->dd_dirname = rm_trailing_slashes(dir);
errno = 0;
- if (dd_lock(dd, WAIT_FOR_OTHER_PROCESS_USLEEP) < 0)
+ if (dd_lock(dd, WAIT_FOR_OTHER_PROCESS_USLEEP, flags) < 0)
{
if ((flags & DD_OPEN_READONLY) && errno == EACCES)
{
@@ -306,22 +311,17 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
* directory when run without arguments, because its option -d DIR
* defaults to "."!
*/
- /*if (!(flags & DD_FAIL_QUIETLY))... - no, DD_FAIL_QUIETLY only means
- * "it's ok if it doesn exist", not "ok if contents is bogus"!
- */
error_msg("'%s' is not a crash dump directory", dir);
- dd_close(dd);
- return NULL;
}
-
- if (errno == ENOENT || errno == ENOTDIR)
+ else if (errno == ENOENT || errno == ENOTDIR)
{
- if (!(flags & DD_FAIL_QUIETLY))
+ if (!(flags & DD_FAIL_QUIETLY_ENOENT))
error_msg("'%s' does not exist", dir);
}
else
{
- perror_msg("Can't access '%s'", dir);
+ if (!(flags & DD_FAIL_QUIETLY_EACCES))
+ perror_msg("Can't access '%s'", dir);
}
dd_close(dd);
return NULL;
@@ -335,8 +335,7 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
struct stat stat_buf;
if (stat(dir, &stat_buf) != 0 || !S_ISDIR(stat_buf.st_mode))
{
- if (!(flags & DD_FAIL_QUIETLY))
- error_msg("'%s' does not exist", dir);
+ error_msg("Can't stat '%s', or it is not a directory", dir);
dd_close(dd);
return NULL;
}
@@ -421,7 +420,7 @@ struct dump_dir *dd_create(const char *dir, uid_t uid)
return NULL;
}
- if (dd_lock(dd, CREATE_LOCK_USLEEP) < 0)
+ if (dd_lock(dd, CREATE_LOCK_USLEEP, /*flags:*/ 0) < 0)
{
dd_close(dd);
return NULL;
@@ -585,7 +584,7 @@ static char *load_text_file(const char *path, unsigned flags)
FILE *fp = fopen(path, "r");
if (!fp)
{
- if (!(flags & DD_FAIL_QUIETLY))
+ if (!(flags & DD_FAIL_QUIETLY_ENOENT))
perror_msg("Can't open file '%s'", path);
return (flags & DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE ? NULL : xstrdup(""));
}
diff --git a/src/lib/run_event.c b/src/lib/run_event.c
index e96e762f..59e2c643 100644
--- a/src/lib/run_event.c
+++ b/src/lib/run_event.c
@@ -168,7 +168,7 @@ static GList *load_event_config(GList *list,
goto stop; /* error (note: dd_opendir logged error msg) */
}
}
- real_val = malloced_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY);
+ real_val = malloced_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY_ENOENT);
}
/* Does VAL match? */
@@ -476,7 +476,7 @@ static int list_possible_events_helper(struct strbuf *result,
goto stop; /* error (note: dd_opendir logged error msg) */
}
}
- char *real_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY);
+ char *real_val = dd_load_text_ext(dd, p, DD_FAIL_QUIETLY_ENOENT);
/* Does VAL match? */
if (strcmp(real_val, line_val) != 0)
{