forked from osmocom/wireshark
Use pid_t on UN*X, and HANDLE on Windows, for the process ID.
This avoids type punning; at least with Xcode 7 beta on El Capitan beta, that produces warnings that get turned into errors. Change-Id: I57f47455b9630f359828c07c92a190b5cb33816f Reviewed-on: https://code.wireshark.org/review/8862 Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
parent
3944e55633
commit
2e76bb466a
|
@ -34,6 +34,8 @@ extern "C" {
|
|||
|
||||
#include "capture_opts.h"
|
||||
|
||||
#include <wsutil/process.h>
|
||||
|
||||
#ifdef HAVE_LIBPCAP
|
||||
/* Current state of capture engine. XXX - differentiate states */
|
||||
typedef enum {
|
||||
|
@ -48,14 +50,14 @@ struct _capture_file;
|
|||
* State of a capture session.
|
||||
*/
|
||||
typedef struct _capture_session {
|
||||
intptr_t fork_child; /**< If not -1, in parent, process ID of child */
|
||||
ws_process_id fork_child; /**< If not -1, in parent, process ID of child */
|
||||
int fork_child_status; /**< Child exit status */
|
||||
#ifdef _WIN32
|
||||
int signal_pipe_write_fd; /**< the pipe to signal the child */
|
||||
#endif
|
||||
capture_state state; /**< current state of the capture engine */
|
||||
capture_state state; /**< current state of the capture engine */
|
||||
#ifndef _WIN32
|
||||
uid_t owner; /**< owner of the cfile */
|
||||
uid_t owner; /**< owner of the cfile */
|
||||
gid_t group; /**< group of the cfile */
|
||||
#endif
|
||||
gboolean session_started;
|
||||
|
|
|
@ -118,12 +118,12 @@ static const char *sync_pipe_signame(int);
|
|||
|
||||
|
||||
static gboolean sync_pipe_input_cb(gint source, gpointer user_data);
|
||||
static int sync_pipe_wait_for_child(intptr_t fork_child, gchar **msgp);
|
||||
static int sync_pipe_wait_for_child(ws_process_id fork_child, gchar **msgp);
|
||||
static void pipe_convert_header(const guchar *header, int header_len, char *indicator, int *block_len);
|
||||
static ssize_t pipe_read_block(int pipe_fd, char *indicator, int len, char *msg,
|
||||
char **err_msg);
|
||||
|
||||
static void (*fetch_dumpcap_pid)(int) = NULL;
|
||||
static void (*fetch_dumpcap_pid)(ws_process_id) = NULL;
|
||||
|
||||
|
||||
void
|
||||
|
@ -659,7 +659,7 @@ sync_pipe_start(capture_options *capture_opts, capture_session *cap_session, voi
|
|||
g_free( (gpointer) argv);
|
||||
return FALSE;
|
||||
}
|
||||
cap_session->fork_child = (intptr_t) pi.hProcess;
|
||||
cap_session->fork_child = pi.hProcess;
|
||||
g_string_free(args, TRUE);
|
||||
|
||||
/* associate the operating system filehandle to a C run-time file handle */
|
||||
|
@ -771,7 +771,7 @@ sync_pipe_start(capture_options *capture_opts, capture_session *cap_session, voi
|
|||
#define PIPE_BUF_SIZE 5120
|
||||
static int
|
||||
sync_pipe_open_command(char** argv, int *data_read_fd,
|
||||
int *message_read_fd, intptr_t *fork_child, gchar **msg, void(*update_cb)(void))
|
||||
int *message_read_fd, ws_process_id *fork_child, gchar **msg, void(*update_cb)(void))
|
||||
{
|
||||
enum PIPES { PIPE_READ, PIPE_WRITE }; /* Constants 0 and 1 for PIPE_READ and PIPE_WRITE */
|
||||
#ifdef _WIN32
|
||||
|
@ -875,7 +875,7 @@ sync_pipe_open_command(char** argv, int *data_read_fd,
|
|||
g_free( (gpointer) argv);
|
||||
return -1;
|
||||
}
|
||||
*fork_child = (intptr_t) pi.hProcess;
|
||||
*fork_child = pi.hProcess;
|
||||
g_string_free(args, TRUE);
|
||||
|
||||
/* associate the operating system filehandles to C run-time file handles */
|
||||
|
@ -983,7 +983,7 @@ sync_pipe_open_command(char** argv, int *data_read_fd,
|
|||
*/
|
||||
static int
|
||||
sync_pipe_close_command(int *data_read_fd, int *message_read_fd,
|
||||
intptr_t *fork_child, gchar **msgp)
|
||||
ws_process_id *fork_child, gchar **msgp)
|
||||
{
|
||||
ws_close(*data_read_fd);
|
||||
if (message_read_fd != NULL)
|
||||
|
@ -1018,7 +1018,7 @@ sync_pipe_run_command_actual(char** argv, gchar **data, gchar **primary_msg,
|
|||
{
|
||||
gchar *msg;
|
||||
int data_pipe_read_fd, sync_pipe_read_fd, ret;
|
||||
intptr_t fork_child;
|
||||
ws_process_id fork_child;
|
||||
char *wait_msg;
|
||||
gchar buffer[PIPE_BUF_SIZE+1] = {0};
|
||||
ssize_t nread;
|
||||
|
@ -1363,7 +1363,7 @@ sync_if_capabilities_open(const gchar *ifname, gboolean monitor_mode,
|
|||
* that must be g_free()d, and -1 will be returned.
|
||||
*/
|
||||
int
|
||||
sync_interface_stats_open(int *data_read_fd, intptr_t *fork_child, gchar **msg, void (*update_cb)(void))
|
||||
sync_interface_stats_open(int *data_read_fd, ws_process_id *fork_child, gchar **msg, void (*update_cb)(void))
|
||||
{
|
||||
int argc;
|
||||
char **argv;
|
||||
|
@ -1515,7 +1515,7 @@ sync_interface_stats_open(int *data_read_fd, intptr_t *fork_child, gchar **msg,
|
|||
|
||||
/* Close down the stats process */
|
||||
int
|
||||
sync_interface_stats_close(int *read_fd, intptr_t *fork_child, gchar **msg)
|
||||
sync_interface_stats_close(int *read_fd, ws_process_id *fork_child, gchar **msg)
|
||||
{
|
||||
#ifndef _WIN32
|
||||
/*
|
||||
|
@ -1869,7 +1869,7 @@ sync_pipe_input_cb(gint source, gpointer user_data)
|
|||
* must be freed with g_free().
|
||||
*/
|
||||
static int
|
||||
sync_pipe_wait_for_child(intptr_t fork_child, gchar **msgp)
|
||||
sync_pipe_wait_for_child(ws_process_id fork_child, gchar **msgp)
|
||||
{
|
||||
int fork_child_status;
|
||||
#ifndef _WIN32
|
||||
|
@ -2140,7 +2140,7 @@ sync_pipe_stop(capture_session *cap_session)
|
|||
|
||||
/* Wireshark has to exit, force the capture child to close */
|
||||
void
|
||||
sync_pipe_kill(intptr_t fork_child)
|
||||
sync_pipe_kill(ws_process_id fork_child)
|
||||
{
|
||||
if (fork_child != -1) {
|
||||
#ifndef _WIN32
|
||||
|
@ -2174,7 +2174,7 @@ sync_pipe_kill(intptr_t fork_child)
|
|||
}
|
||||
}
|
||||
|
||||
void capture_sync_set_fetch_dumpcap_pid_cb(void(*cb)(int pid)) {
|
||||
void capture_sync_set_fetch_dumpcap_pid_cb(void(*cb)(ws_process_id pid)) {
|
||||
fetch_dumpcap_pid = cb;
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ sync_pipe_stop(capture_session *cap_session);
|
|||
|
||||
/** User wants to stop the program, just kill the child as soon as possible */
|
||||
extern void
|
||||
sync_pipe_kill(intptr_t fork_child);
|
||||
sync_pipe_kill(ws_process_id fork_child);
|
||||
|
||||
/** Set wireless channel using dumpcap */
|
||||
extern int
|
||||
|
@ -75,11 +75,11 @@ sync_if_capabilities_open(const gchar *ifname, gboolean monitor_mode,
|
|||
|
||||
/** Start getting interface statistics using dumpcap. */
|
||||
extern int
|
||||
sync_interface_stats_open(int *read_fd, intptr_t *fork_child, gchar **msg, void (*update_cb)(void));
|
||||
sync_interface_stats_open(int *read_fd, ws_process_id *fork_child, gchar **msg, void (*update_cb)(void));
|
||||
|
||||
/** Stop gathering statistics. */
|
||||
extern int
|
||||
sync_interface_stats_close(int *read_fd, intptr_t *fork_child, gchar **msg);
|
||||
sync_interface_stats_close(int *read_fd, ws_process_id *fork_child, gchar **msg);
|
||||
|
||||
/** Read a line from a pipe, similar to fgets. Non-blocking. */
|
||||
extern int
|
||||
|
|
4
tshark.c
4
tshark.c
|
@ -2278,7 +2278,7 @@ DIAG_ON(cast-qual)
|
|||
typedef struct pipe_input_tag {
|
||||
gint source;
|
||||
gpointer user_data;
|
||||
intptr_t *child_process;
|
||||
ws_process_id *child_process;
|
||||
pipe_input_cb_t input_cb;
|
||||
guint pipe_input_id;
|
||||
#ifdef _WIN32
|
||||
|
@ -2351,7 +2351,7 @@ pipe_timer_cb(gpointer data)
|
|||
|
||||
|
||||
void
|
||||
pipe_input_set_handler(gint source, gpointer user_data, intptr_t *child_process, pipe_input_cb_t input_cb)
|
||||
pipe_input_set_handler(gint source, gpointer user_data, ws_process_id *child_process, pipe_input_cb_t input_cb)
|
||||
{
|
||||
|
||||
pipe_input.source = source;
|
||||
|
|
|
@ -63,7 +63,7 @@ typedef struct if_stat_cache_item_s {
|
|||
|
||||
struct if_stat_cache_s {
|
||||
int stat_fd;
|
||||
intptr_t fork_child;
|
||||
ws_process_id fork_child;
|
||||
GList *cache_list; /* List of if_stat_chache_entry_t */
|
||||
};
|
||||
|
||||
|
@ -645,7 +645,7 @@ capture_input_closed(capture_session *cap_session, gchar *msg)
|
|||
if_stat_cache_t *
|
||||
capture_stat_start(capture_options *capture_opts) {
|
||||
int stat_fd;
|
||||
intptr_t fork_child;
|
||||
ws_process_id fork_child;
|
||||
gchar *msg;
|
||||
if_stat_cache_t *sc = NULL;
|
||||
if_stat_cache_item_t *sc_item;
|
||||
|
|
|
@ -580,7 +580,7 @@ main_window_quit(void)
|
|||
typedef struct pipe_input_tag {
|
||||
gint source;
|
||||
gpointer user_data;
|
||||
intptr_t *child_process;
|
||||
ws_process_id *child_process;
|
||||
pipe_input_cb_t input_cb;
|
||||
guint pipe_input_id;
|
||||
#ifdef _WIN32
|
||||
|
@ -693,7 +693,7 @@ pipe_input_cb(GIOChannel *source _U_,
|
|||
void
|
||||
pipe_input_set_handler(gint source,
|
||||
gpointer user_data,
|
||||
intptr_t *child_process,
|
||||
ws_process_id *child_process,
|
||||
pipe_input_cb_t input_cb)
|
||||
{
|
||||
static pipe_input_t pipe_input;
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
// If we ever add support for multiple windows this will need to be replaced.
|
||||
static MainWindow *gbl_cur_main_window_ = NULL;
|
||||
|
||||
void pipe_input_set_handler(gint source, gpointer user_data, intptr_t *child_process, pipe_input_cb_t input_cb)
|
||||
void pipe_input_set_handler(gint source, gpointer user_data, ws_process_id *child_process, pipe_input_cb_t input_cb)
|
||||
{
|
||||
gbl_cur_main_window_->setPipeInputHandler(source, user_data, child_process, input_cb);
|
||||
}
|
||||
|
@ -472,7 +472,7 @@ QString MainWindow::getFilter()
|
|||
return df_combo_box_->itemText(df_combo_box_->count());
|
||||
}
|
||||
|
||||
void MainWindow::setPipeInputHandler(gint source, gpointer user_data, intptr_t *child_process, pipe_input_cb_t input_cb)
|
||||
void MainWindow::setPipeInputHandler(gint source, gpointer user_data, ws_process_id *child_process, pipe_input_cb_t input_cb)
|
||||
{
|
||||
pipe_source_ = source;
|
||||
pipe_child_process_ = child_process;
|
||||
|
|
|
@ -78,7 +78,7 @@ class MainWindow : public QMainWindow
|
|||
public:
|
||||
explicit MainWindow(QWidget *parent = 0);
|
||||
~MainWindow();
|
||||
void setPipeInputHandler(gint source, gpointer user_data, intptr_t *child_process, pipe_input_cb_t input_cb);
|
||||
void setPipeInputHandler(gint source, gpointer user_data, ws_process_id *child_process, pipe_input_cb_t input_cb);
|
||||
|
||||
QString getFilter();
|
||||
#ifdef HAVE_LIBPCAP
|
||||
|
@ -140,7 +140,7 @@ private:
|
|||
// Pipe input
|
||||
gint pipe_source_;
|
||||
gpointer pipe_user_data_;
|
||||
intptr_t *pipe_child_process_;
|
||||
ws_process_id *pipe_child_process_;
|
||||
pipe_input_cb_t pipe_input_cb_;
|
||||
#ifdef _WIN32
|
||||
QTimer *pipe_timer_;
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <wsutil/process.h>
|
||||
|
||||
#include "epan/packet_info.h"
|
||||
#include "epan/column-utils.h"
|
||||
|
||||
|
@ -58,7 +60,7 @@ extern void main_window_quit(void);
|
|||
/* read from a pipe (callback) */
|
||||
typedef gboolean (*pipe_input_cb_t) (gint source, gpointer user_data);
|
||||
/* install callback function, called if pipe input is available */
|
||||
extern void pipe_input_set_handler(gint source, gpointer user_data, intptr_t *child_process, pipe_input_cb_t input_cb);
|
||||
extern void pipe_input_set_handler(gint source, gpointer user_data, ws_process_id *child_process, pipe_input_cb_t input_cb);
|
||||
|
||||
/* packet_list.c */
|
||||
|
||||
|
|
|
@ -107,6 +107,7 @@ libwsutil_nonrepl_INCLUDES = \
|
|||
os_version_info.h \
|
||||
plugins.h \
|
||||
privileges.h \
|
||||
process.h \
|
||||
sha1.h \
|
||||
sign_ext.h \
|
||||
sober128.h \
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/* process.h
|
||||
* Process utility definitions
|
||||
*
|
||||
* Wireshark - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@wireshark.org>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef _WSUTIL_PROCESS_H_
|
||||
#define _WSUTIL_PROCESS_H_
|
||||
|
||||
#include "ws_symbol_export.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#ifdef _WIN32
|
||||
typedef HANDLE ws_process_id; /* on Windows, a process ID is a HANDLE */
|
||||
#else
|
||||
typedef pid_t ws_process_id; /* on UN\*X, a process ID is a pid_t */
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _WSUTIL_PROCESS_H_ */
|
||||
|
Loading…
Reference in New Issue