Fix the av_set_string() free / alloc issue.

Originally committed as revision 14134 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer
2008-07-08 23:50:03 +00:00
parent cdb5af79e3
commit 8dbee6538d
3 changed files with 28 additions and 9 deletions

View File

@@ -115,7 +115,7 @@ static int hexchar2int(char c) {
return -1;
}
const AVOption *av_set_string(void *obj, const char *name, const char *val){
const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){
return set_all_opt(obj, o->unit, o->default_val);
@@ -195,10 +195,19 @@ const AVOption *av_set_string(void *obj, const char *name, const char *val){
return NULL;
}
if(alloc){
av_free((void*)(((uint8_t*)obj) + o->offset));
val= av_strdup(val);
}
memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));
return o;
}
const AVOption *av_set_string(void *obj, const char *name, const char *val){
return av_set_string2(obj, name, val, 0);
}
const AVOption *av_set_double(void *obj, const char *name, double n){
return av_set_number(obj, name, n, 1, 1);
}