int av_reallocp(void *ptr, size_t size)
{
- void **ptrptr = ptr;
- void *ret;
+ void *val;
if (!size) {
av_freep(ptr);
return 0;
}
- ret = av_realloc(*ptrptr, size);
- if (!ret) {
+ memcpy(&val, ptr, sizeof(val));
+ val = av_realloc(val, size);
+
+ if (!val) {
av_freep(ptr);
return AVERROR(ENOMEM);
}
- *ptrptr = ret;
+ memcpy(ptr, &val, sizeof(val));
return 0;
}
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
{
- void **ptrptr = ptr;
- void *ret;
+ void *val;
+
if (!size || nmemb >= INT_MAX / size)
return AVERROR(ENOMEM);
if (!nmemb) {
av_freep(ptr);
return 0;
}
- ret = av_realloc(*ptrptr, nmemb * size);
- if (!ret) {
+
+ memcpy(&val, ptr, sizeof(val));
+ val = av_realloc(val, nmemb * size);
+ if (!val) {
av_freep(ptr);
return AVERROR(ENOMEM);
}
- *ptrptr = ret;
+
+ memcpy(ptr, &val, sizeof(val));
return 0;
}
void av_freep(void *arg)
{
- void **ptr = (void **)arg;
- av_free(*ptr);
- *ptr = NULL;
+ void *val;
+
+ memcpy(&val, arg, sizeof(val));
+ memcpy(arg, &(void *){ NULL }, sizeof(val));
+ av_free(val);
}
void *av_mallocz(size_t size)