 a8d2532645
			
		
	
	
		a8d2532645
		
	
	
	
	
		
			
			No header includes qemu-common.h after this commit, as prescribed by qemu-common.h's file comment. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20190523143508.25387-5-armbru@redhat.com> [Rebased with conflicts resolved automatically, except for include/hw/arm/xlnx-zynqmp.h hw/arm/nrf51_soc.c hw/arm/msf2-soc.c block/qcow2-refcount.c block/qcow2-cluster.c block/qcow2-cache.c target/arm/cpu.h target/lm32/cpu.h target/m68k/cpu.h target/mips/cpu.h target/moxie/cpu.h target/nios2/cpu.h target/openrisc/cpu.h target/riscv/cpu.h target/tilegx/cpu.h target/tricore/cpu.h target/unicore32/cpu.h target/xtensa/cpu.h; bsd-user/main.c and net/tap-bsd.c fixed up]
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * QEMU file monitor helper
 | |
|  *
 | |
|  * Copyright (c) 2018 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * This library 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifndef QEMU_FILEMONITOR_H
 | |
| #define QEMU_FILEMONITOR_H
 | |
| 
 | |
| 
 | |
| 
 | |
| typedef struct QFileMonitor QFileMonitor;
 | |
| 
 | |
| typedef enum {
 | |
|     /* File has been created in a dir */
 | |
|     QFILE_MONITOR_EVENT_CREATED,
 | |
|     /* File has been modified in a dir */
 | |
|     QFILE_MONITOR_EVENT_MODIFIED,
 | |
|     /* File has been deleted in a dir */
 | |
|     QFILE_MONITOR_EVENT_DELETED,
 | |
|     /* File has attributes changed */
 | |
|     QFILE_MONITOR_EVENT_ATTRIBUTES,
 | |
|     /* Dir is no longer being monitored (due to deletion) */
 | |
|     QFILE_MONITOR_EVENT_IGNORED,
 | |
| } QFileMonitorEvent;
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * QFileMonitorHandler:
 | |
|  * @id: id from qemu_file_monitor_add_watch()
 | |
|  * @event: the file change that occurred
 | |
|  * @filename: the name of the file affected
 | |
|  * @opaque: opaque data provided to qemu_file_monitor_add_watch()
 | |
|  *
 | |
|  * Invoked whenever a file changes. If @event is
 | |
|  * QFILE_MONITOR_EVENT_IGNORED, @filename will be
 | |
|  * empty.
 | |
|  *
 | |
|  */
 | |
| typedef void (*QFileMonitorHandler)(int64_t id,
 | |
|                                     QFileMonitorEvent event,
 | |
|                                     const char *filename,
 | |
|                                     void *opaque);
 | |
| 
 | |
| /**
 | |
|  * qemu_file_monitor_new:
 | |
|  * @errp: pointer to a NULL-initialized error object
 | |
|  *
 | |
|  * Create a handle for a file monitoring object.
 | |
|  *
 | |
|  * This object does locking internally to enable it to be
 | |
|  * safe to use from multiple threads
 | |
|  *
 | |
|  * If the platform does not support file monitoring, an
 | |
|  * error will be reported. Likewise if file monitoring
 | |
|  * is supported, but cannot be initialized
 | |
|  *
 | |
|  * Currently this is implemented on Linux platforms with
 | |
|  * the inotify subsystem.
 | |
|  *
 | |
|  * Returns: the new monitoring object, or NULL on error
 | |
|  */
 | |
| QFileMonitor *qemu_file_monitor_new(Error **errp);
 | |
| 
 | |
| /**
 | |
|  * qemu_file_monitor_free:
 | |
|  * @mon: the file monitor context
 | |
|  *
 | |
|  * Free resources associated with the file monitor,
 | |
|  * including any currently registered watches.
 | |
|  */
 | |
| void qemu_file_monitor_free(QFileMonitor *mon);
 | |
| 
 | |
| /**
 | |
|  * qemu_file_monitor_add_watch:
 | |
|  * @mon: the file monitor context
 | |
|  * @dirpath: the directory whose contents to watch
 | |
|  * @filename: optional filename to filter on
 | |
|  * @cb: the function to invoke when @dirpath has changes
 | |
|  * @opaque: data to pass to @cb
 | |
|  * @errp: pointer to a NULL-initialized error object
 | |
|  *
 | |
|  * Register to receive notifications of changes
 | |
|  * in the directory @dirpath. All files in the
 | |
|  * directory will be monitored. If the caller is
 | |
|  * only interested in one specific file, @filename
 | |
|  * can be used to filter events.
 | |
|  *
 | |
|  * Returns: a positive integer watch ID, or -1 on error
 | |
|  */
 | |
| int64_t qemu_file_monitor_add_watch(QFileMonitor *mon,
 | |
|                                     const char *dirpath,
 | |
|                                     const char *filename,
 | |
|                                     QFileMonitorHandler cb,
 | |
|                                     void *opaque,
 | |
|                                     Error **errp);
 | |
| 
 | |
| /**
 | |
|  * qemu_file_monitor_remove_watch:
 | |
|  * @mon: the file monitor context
 | |
|  * @dirpath: the directory whose contents to unwatch
 | |
|  * @id: id of the watch to remove
 | |
|  *
 | |
|  * Removes the file monitoring watch @id, associated
 | |
|  * with the directory @dirpath. This must never be
 | |
|  * called from a QFileMonitorHandler callback, or a
 | |
|  * deadlock will result.
 | |
|  */
 | |
| void qemu_file_monitor_remove_watch(QFileMonitor *mon,
 | |
|                                     const char *dirpath,
 | |
|                                     int64_t id);
 | |
| 
 | |
| #endif /* QEMU_FILEMONITOR_H */
 |