Blame src/plugins/xorg-utils.h

Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Copyright (C) 2015  ABRT team
Packit Service 8a8a03
 * Copyright (C) 2015  RedHat Inc
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * This program is free software; you can redistribute it and/or modify
Packit Service 8a8a03
 * it under the terms of the GNU General Public License as published by
Packit Service 8a8a03
 * the Free Software Foundation; either version 2 of the License, or
Packit Service 8a8a03
 * (at your option) any later version.
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * This program is distributed in the hope that it will be useful,
Packit Service 8a8a03
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 8a8a03
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 8a8a03
 * GNU General Public License for more details.
Packit Service 8a8a03
 */
Packit Service 8a8a03
#ifndef _ABRT_XORG_UTILS_H_
Packit Service 8a8a03
#define _ABRT_XORG_UTILS_H_
Packit Service 8a8a03
Packit Service 8a8a03
#include "libabrt.h"
Packit Service 8a8a03
Packit Service 8a8a03
/* How many problem dirs to create at most?
Packit Service 8a8a03
 * Also causes cooldown sleep with -t if exceeded -
Packit Service 8a8a03
 * useful when called from a log watcher.
Packit Service 8a8a03
 */
Packit Service 8a8a03
#define ABRT_OOPS_MAX_DUMPED_COUNT  5
Packit Service 8a8a03
Packit Service 8a8a03
#ifdef __cplusplus
Packit Service 8a8a03
extern "C" {
Packit Service 8a8a03
#endif
Packit Service 8a8a03
Packit Service 8a8a03
#define XORG_SEARCH_STRING "Backtrace:"
Packit Service 8a8a03
Packit Service 8a8a03
enum {
Packit Service 8a8a03
    ABRT_XORG_THROTTLE_CREATION = 1 << 0,
Packit Service 8a8a03
    ABRT_XORG_WORLD_READABLE    = 1 << 1,
Packit Service 8a8a03
    ABRT_XORG_PRINT_STDOUT      = 1 << 2,
Packit Service 8a8a03
};
Packit Service 8a8a03
Packit Service 8a8a03
int g_abrt_xorg_sleep_woke_up_on_signal;
Packit Service 8a8a03
int abrt_xorg_signaled_sleep(int seconds);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Information about found xorg crash
Packit Service 8a8a03
 */
Packit Service 8a8a03
struct xorg_crash_info
Packit Service 8a8a03
{
Packit Service 8a8a03
    char *backtrace;
Packit Service 8a8a03
    char *reason;
Packit Service 8a8a03
    char *exe;
Packit Service 8a8a03
};
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Free xorg crash info data
Packit Service 8a8a03
 */
Packit Service 8a8a03
void xorg_crash_info_free(struct xorg_crash_info *crash_info);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Skip log line prefixes
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * Example:
Packit Service 8a8a03
 * "[    28.900] (EE) Foo" -> "Foo"
Packit Service 8a8a03
 * "(EE) Foo"              -> "Foo"
Packit Service 8a8a03
 * " Foo"                  -> "Foo"
Packit Service 8a8a03
 * "Foo"                   -> "Foo"
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * @param str line from log file
Packit Service 8a8a03
 * @returns line without prefixes
Packit Service 8a8a03
 */
Packit Service 8a8a03
char *skip_pfx(char *str);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Prints information about found xorg crash
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * @param crash_info extracted xorg crash information
Packit Service 8a8a03
 */
Packit Service 8a8a03
void xorg_crash_info_print_crash(struct xorg_crash_info *crash_info);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Get next line from given stream (FILE *)
Packit Service 8a8a03
 * Use as wrapper for reading function
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * @param fd open FILE * as void *
Packit Service 8a8a03
 * @returns malloced and unlimited line without railing \n
Packit Service 8a8a03
 */
Packit Service 8a8a03
char *xorg_get_next_line_from_fd(void *fd);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Process Xorg Backtrace
Packit Service 8a8a03
 * This function is called after the key word "Backtrace:" was found in log.
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * @param get_next_line function used for reading lines from data
Packit Service 8a8a03
 * @param data is used as get_nex_line function parameter
Packit Service 8a8a03
 * @returns extracted xorg crash data or NULL in case of error
Packit Service 8a8a03
 */
Packit Service 8a8a03
struct xorg_crash_info *process_xorg_bt(char *(*get_next_line)(void *), void *data);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Saves Xorg crash details in the dump directory
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * @param dd The destination directory
Packit Service 8a8a03
 * @param crash_info the crash details
Packit Service 8a8a03
 * @returns non-0 value in case of an error; otherwise 0
Packit Service 8a8a03
 */
Packit Service 8a8a03
int xorg_crash_info_save_in_dump_dir(struct xorg_crash_info *crash_info, struct dump_dir *dd);
Packit Service 8a8a03
Packit Service 8a8a03
/*
Packit Service 8a8a03
 * Create dump dir from given xorg crash info data
Packit Service 8a8a03
 *
Packit Service 8a8a03
 * @param crash_info xorg crash information
Packit Service 8a8a03
 * @param path where the dump dir will be created
Packit Service 8a8a03
 * @param world_readable make the dump dir world readable
Packit Service 8a8a03
 */
Packit Service 8a8a03
void xorg_crash_info_create_dump_dir(struct xorg_crash_info *crash_info, const char *dump_location,
Packit Service 8a8a03
                                     bool world_readable);
Packit Service 8a8a03
Packit Service 8a8a03
#ifdef __cplusplus
Packit Service 8a8a03
}
Packit Service 8a8a03
#endif
Packit Service 8a8a03
Packit Service 8a8a03
#endif /*_ABRT_XORG_UTILS_H_*/