[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 03/14] cutils: introduce qemu_fopen_err()
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 03/14] cutils: introduce qemu_fopen_err() |
Date: |
Wed, 30 May 2012 11:14:50 -0300 |
A fopen() wrapper that takes an Error argument.
Signed-off-by: Luiz Capitulino <address@hidden>
---
cutils.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
qemu-common.h | 3 +++
2 files changed, 48 insertions(+)
diff --git a/cutils.c b/cutils.c
index af308cd..85dbb06 100644
--- a/cutils.c
+++ b/cutils.c
@@ -26,6 +26,7 @@
#include <math.h>
#include "qemu_socket.h"
+#include "error.h"
void pstrcpy(char *buf, int buf_size, const char *str)
{
@@ -549,3 +550,47 @@ int qemu_sendv(int sockfd, struct iovec *iov, int len, int
iov_offset)
return do_sendv_recvv(sockfd, iov, len, iov_offset, 1);
}
+static void set_open_err(Error **errp, const char *path, int err_nr)
+{
+ switch (err_nr) {
+ case EACCES:
+ error_set(errp, QERR_INVALID_ACCESS);
+ return;
+ case EMFILE:
+ error_set(errp, QERR_TOO_MANY_FILES_PROC);
+ return;
+ case ENFILE:
+ error_set(errp, QERR_TOO_MANY_FILES_SYS);
+ return;
+ case ENAMETOOLONG:
+ error_set(errp, QERR_NAME_TOO_LONG);
+ return;
+ case ENOSPC:
+ error_set(errp, QERR_NO_SPACE);
+ return;
+ case EPERM:
+ error_set(errp, QERR_PERMISSION_DENIED);
+ return;
+ case EROFS:
+ error_set(errp, QERR_READ_ONLY_FS);
+ return;
+ case ENOENT:
+ error_set(errp, QERR_NO_FILE_DIR);
+ return;
+ default:
+ error_set(errp, QERR_OPEN_FILE_FAILED, path);
+ return;
+ }
+}
+
+FILE *qemu_fopen_err(const char *path, const char *mode, Error **errp)
+{
+ FILE *fp;
+
+ fp = fopen(path, mode);
+ if (!fp) {
+ set_open_err(errp, path, errno);
+ }
+
+ return fp;
+}
diff --git a/qemu-common.h b/qemu-common.h
index cccfb42..2cab2a8 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -4,6 +4,7 @@
#include "compiler.h"
#include "config-host.h"
+#include "error.h"
#if defined(__arm__) || defined(__sparc__) || defined(__mips__) ||
defined(__hppa__) || defined(__ia64__)
#define WORDS_ALIGNED
@@ -208,6 +209,8 @@ int qemu_pipe(int pipefd[2]);
int qemu_recvv(int sockfd, struct iovec *iov, int len, int iov_offset);
int qemu_sendv(int sockfd, struct iovec *iov, int len, int iov_offset);
+FILE *qemu_fopen_err(const char *path, const char *mode, Error **errp);
+
/* Error handling. */
void QEMU_NORETURN hw_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
--
1.7.10.2.565.gbd578b5
- [Qemu-devel] [PATCH qmp-next v2 00/14]: qapi: convert screendump, Luiz Capitulino, 2012/05/30
- [Qemu-devel] [PATCH 04/14] cutils: introduce qemu_fprintf_err(), Luiz Capitulino, 2012/05/30
- [Qemu-devel] [PATCH 03/14] cutils: introduce qemu_fopen_err(),
Luiz Capitulino <=
- [Qemu-devel] [PATCH 08/14] console: vga_hw_screen_dump_ptr: take an Error argument, Luiz Capitulino, 2012/05/30
- [Qemu-devel] [PATCH 02/14] qerror: add new errors, Luiz Capitulino, 2012/05/30
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Paolo Bonzini, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Luiz Capitulino, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Paolo Bonzini, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Luiz Capitulino, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Paolo Bonzini, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Luiz Capitulino, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Paolo Bonzini, 2012/05/31
- Re: [Qemu-devel] [PATCH 02/14] qerror: add new errors, Luiz Capitulino, 2012/05/31