On 07/12/2012 04:05 PM, Jiri Moskovcak wrote:
> ---
>  src/lib/abrt_sock.c |   13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/src/lib/abrt_sock.c b/src/lib/abrt_sock.c
> index b2c9928..f4a5d77 100644
> --- a/src/lib/abrt_sock.c
> +++ b/src/lib/abrt_sock.c
> @@ -62,6 +62,19 @@ static int connect_to_abrtd_and_call_DeleteDebugDump(const 
> char *dump_dir_name)
>  
>  int delete_dump_dir_possibly_using_abrtd(const char *dump_dir_name)
>  {
> +
> +    struct stat stat_buf;
> +    int res = stat(dump_dir_name, &stat_buf);
> +    /* don't try to delete the dir if the stat fails */
> +    if (res != 0)
> +    {
> +        if (errno == ENOENT)
> +        {
> +            error_msg(_("Directory '%s' doesn't exist"), dump_dir_name);
> +        }
> +        return res;
> +    }
> +
>      /* Try to delete it ourselves */
>      struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY);
>      if (dd)

You can just check for "if (errno == ENOENT || errno == ENOTDIR)"
after you see dd == NULL:


    struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY);
    if (dd)
    {
        if (dd->locked) /* it is not readonly */
            return dd_delete(dd);
        dd_close(dd);
    }
    else
    {
        if (errno == ENOENT || errno == ENOTDIR)
            /* No such dir, no point in trying to talk over socket */
            return;
    }

    VERB1 log("Deleting '%s' via abrtd", dump_dir_name);
    return connect_to_abrtd_and_call_DeleteDebugDump(dump_dir_name);
}

Reply via email to