Use pid_t on UN*X, and HANDLE on Windows, for the process ID.
authorGuy Harris <guy@alum.mit.edu>
Wed, 10 Jun 2015 00:30:15 +0000 (17:30 -0700)
committerGuy Harris <guy@alum.mit.edu>
Wed, 10 Jun 2015 00:30:57 +0000 (00:30 +0000)
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>
capchild/capture_session.h
capchild/capture_sync.c
capchild/capture_sync.h
tshark.c
ui/capture.c
ui/gtk/gui_utils.c
ui/qt/main_window.cpp
ui/qt/main_window.h
ui/ui_util.h
wsutil/Makefile.common
wsutil/process.h [new file with mode: 0644]

index e21d182fe325168f5444195c4740c4c50bad16d8..4f0de81b0126650b99694a1c18dbfb43e1426262 100644 (file)
@@ -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;
index b2a649be878dc9e7b295e488a6b6d4ad43f9b69a..8efe26408a43e96f67003b9d069ca9db97ca6dda 100644 (file)
@@ -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;
 }
 
index c56656bc09a5ec0c2e7ba36dcd75d9b3b47c581f..485a41f9f22cc01c5650b1b9353c77d07dde6e95 100644 (file)
@@ -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
index 7b474a89205293f7d770bcc7de60d1e3308644dc..1023c6fc0d43f1e930b713d21fb5441fa6d8ac4d 100644 (file)
--- a/tshark.c
+++ b/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;
index 18c3040edbd0ec879b5fb2f6a199efa358ab5c7a..590c33a7b50d67e20b6232215ed79f1d62fc6da6 100644 (file)
@@ -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;
index 761e1d8034e3703b8eb1d6e23c373beae612c86c..1e4ad67f09c13d8d576a762261ecec67f9ef0866 100644 (file)
@@ -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;
index 3deb284bab4579172730129f394fc8d6e316d9b3..52af27a33640226aa4923d3d4806ce127dc195b2 100644 (file)
@@ -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;
index 172244e70375e6b29f8be42a6f2c0700455dc1c8..bf538d88fee5f0928476cdf1c846bc81b77ab4ce 100644 (file)
@@ -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_;
index 5eba626104d6ae6761edd92707d9c88e336ecc9f..6f966361dc75c380d380c590d81393da6b045142 100644 (file)
@@ -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 */
 
index f93f973546d8e8743cccdda34f5018c72aa8e126..60d843ab31dd0472c34593e19d0e1d704c2628dc 100644 (file)
@@ -107,6 +107,7 @@ libwsutil_nonrepl_INCLUDES = \
        os_version_info.h \
        plugins.h       \
        privileges.h    \
+       process.h       \
        sha1.h          \
        sign_ext.h      \
        sober128.h      \
diff --git a/wsutil/process.h b/wsutil/process.h
new file mode 100644 (file)
index 0000000..eb3fd4c
--- /dev/null
@@ -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_ */
+