X-Git-Url: http://git.code-monkey.de/?p=ruby-vorbistagger.git;a=blobdiff_plain;f=ext%2Fvcedit.c;fp=ext%2Fvcedit.c;h=414d6d060f31c0d98f6b3a4a12dfa18748e79904;hp=7976a066f4e5409fd5945617d6ec386fa4439cd2;hb=e04f6c2b90c9501fc613a130ee90863cc84f4a98;hpb=48f59b2b6685342bdc1a9227127639c62c83d517 diff --git a/ext/vcedit.c b/ext/vcedit.c index 7976a06..414d6d0 100644 --- a/ext/vcedit.c +++ b/ext/vcedit.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include #include @@ -41,6 +43,8 @@ struct vcedit_state_St { vorbis_info vi; FILE *in; + mode_t file_mode; + bool opened; long serial; unsigned char *mainbuf; @@ -265,6 +269,7 @@ vcedit_open (vcedit_state *s) ogg_packet *header; ogg_packet header_main, header_comments, header_codebooks; ogg_page og; + struct stat st; char *buffer; size_t bytes, total = 0; int i = 0; @@ -273,6 +278,8 @@ vcedit_open (vcedit_state *s) if (!s->in) return VCEDIT_ERR_OPEN; + s->file_mode = stat (s->filename, &st) ? 0664 : st.st_mode; + ogg_sync_init (&s->oy); do { @@ -560,6 +567,7 @@ cleanup: fclose (out); unlink (s->filename); rename (tmpfile, s->filename); + chmod (s->filename, s->file_mode); } ogg_stream_clear (&streamout);