Skip to content

Commit

Permalink
Merge remote-tracking branch 'mdroth/qga-pull-2013-05-13' into staging
Browse files Browse the repository at this point in the history
* mdroth/qga-pull-2013-05-13:
  qga: unlink just created guest-file if fchmod() or fdopen() fails on it
  qga: distinguish binary modes in "guest_file_open_modes" map

Signed-off-by: Anthony Liguori <[email protected]>
  • Loading branch information
Anthony Liguori committed May 17, 2013
2 parents 77417f1 + 2b72001 commit ce4cc31
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions qga/commands-posix.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,17 +242,27 @@ static GuestFileHandle *guest_file_handle_find(int64_t id, Error **err)

typedef const char * const ccpc;

#ifndef O_BINARY
#define O_BINARY 0
#endif

/* http://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html */
static const struct {
ccpc *forms;
int oflag_base;
} guest_file_open_modes[] = {
{ (ccpc[]){ "r", "rb", NULL }, O_RDONLY },
{ (ccpc[]){ "w", "wb", NULL }, O_WRONLY | O_CREAT | O_TRUNC },
{ (ccpc[]){ "a", "ab", NULL }, O_WRONLY | O_CREAT | O_APPEND },
{ (ccpc[]){ "r+", "rb+", "r+b", NULL }, O_RDWR },
{ (ccpc[]){ "w+", "wb+", "w+b", NULL }, O_RDWR | O_CREAT | O_TRUNC },
{ (ccpc[]){ "a+", "ab+", "a+b", NULL }, O_RDWR | O_CREAT | O_APPEND }
{ (ccpc[]){ "r", NULL }, O_RDONLY },
{ (ccpc[]){ "rb", NULL }, O_RDONLY | O_BINARY },
{ (ccpc[]){ "w", NULL }, O_WRONLY | O_CREAT | O_TRUNC },
{ (ccpc[]){ "wb", NULL }, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY },
{ (ccpc[]){ "a", NULL }, O_WRONLY | O_CREAT | O_APPEND },
{ (ccpc[]){ "ab", NULL }, O_WRONLY | O_CREAT | O_APPEND | O_BINARY },
{ (ccpc[]){ "r+", NULL }, O_RDWR },
{ (ccpc[]){ "rb+", "r+b", NULL }, O_RDWR | O_BINARY },
{ (ccpc[]){ "w+", NULL }, O_RDWR | O_CREAT | O_TRUNC },
{ (ccpc[]){ "wb+", "w+b", NULL }, O_RDWR | O_CREAT | O_TRUNC | O_BINARY },
{ (ccpc[]){ "a+", NULL }, O_RDWR | O_CREAT | O_APPEND },
{ (ccpc[]){ "ab+", "a+b", NULL }, O_RDWR | O_CREAT | O_APPEND | O_BINARY }
};

static int
Expand Down Expand Up @@ -345,6 +355,9 @@ safe_open_or_create(const char *path, const char *mode, Error **err)
}

close(fd);
if (oflag & O_CREAT) {
unlink(path);
}
}
}

Expand Down

0 comments on commit ce4cc31

Please sign in to comment.