projects
/
ruby-vorbistagger.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Code cleanup.
[ruby-vorbistagger.git]
/
ext
/
vcedit.c
diff --git
a/ext/vcedit.c
b/ext/vcedit.c
index 7976a066f4e5409fd5945617d6ec386fa4439cd2..f3ad2c95a1a1557468947739d46ec08838a70928 100644
(file)
--- a/
ext/vcedit.c
+++ b/
ext/vcedit.c
@@
-23,6
+23,8
@@
#include <errno.h>
#include <limits.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <ogg/ogg.h>
#include <vorbis/codec.h>
#include <assert.h>
#include <ogg/ogg.h>
#include <vorbis/codec.h>
#include <assert.h>
@@
-41,6
+43,8
@@
struct vcedit_state_St {
vorbis_info vi;
FILE *in;
vorbis_info vi;
FILE *in;
+ mode_t file_mode;
+
bool opened;
long serial;
unsigned char *mainbuf;
bool opened;
long serial;
unsigned char *mainbuf;
@@
-195,12
+199,12
@@
_commentheader_out (vcedit_state *s, ogg_packet *op)
oggpack_write (&opb, 1, 1);
oggpack_write (&opb, 1, 1);
- op->packet = _ogg_malloc (oggpack_bytes (&opb));
- memcpy (op->packet, opb.buffer, oggpack_bytes (&opb));
-
op->bytes = oggpack_bytes (&opb);
op->bytes = oggpack_bytes (&opb);
- op->b_o_s = 0;
- op->e_o_s = 0;
+ op->packet = _ogg_malloc (op->bytes);
+
+ memcpy (op->packet, opb.buffer, op->bytes);
+
+ op->b_o_s = op->e_o_s = 0;
op->granulepos = 0;
oggpack_writeclear (&opb);
op->granulepos = 0;
oggpack_writeclear (&opb);
@@
-265,6
+269,7
@@
vcedit_open (vcedit_state *s)
ogg_packet *header;
ogg_packet header_main, header_comments, header_codebooks;
ogg_page og;
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;
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;
if (!s->in)
return VCEDIT_ERR_OPEN;
+ s->file_mode = stat (s->filename, &st) ? 0664 : st.st_mode;
+
ogg_sync_init (&s->oy);
do {
ogg_sync_init (&s->oy);
do {
@@
-560,6
+567,7
@@
cleanup:
fclose (out);
unlink (s->filename);
rename (tmpfile, s->filename);
fclose (out);
unlink (s->filename);
rename (tmpfile, s->filename);
+ chmod (s->filename, s->file_mode);
}
ogg_stream_clear (&streamout);
}
ogg_stream_clear (&streamout);