[libdvdnav-devel] [Git][videolan/libdvdread][master] ifo_read_free: remove one pointer indirection
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Sat Jul 4 17:44:25 UTC 2026
Jean-Baptiste Kempf pushed to branch master at VideoLAN / libdvdread
Commits:
64201466 by Jean-Baptiste Kempf at 2026-07-04T19:40:28+02:00
ifo_read_free: remove one pointer indirection
And fix warnings of address of pointer inside packed-struct
- - - - -
1 changed file:
- src/ifo_read.c
Changes:
=====================================
src/ifo_read.c
=====================================
@@ -126,9 +126,9 @@ static int ifoRead_VOBU_ADMAP_internal(ifo_handle_t *ifofile,
static int ifoRead_PGCIT_internal(ifo_handle_t *ifofile, pgcit_t *pgcit,
unsigned int offset);
-static void ifoFree_PGC(pgc_t **pgc);
+static void ifoFree_PGC(pgc_t *pgc);
static void ifoFree_PGC_COMMAND_TBL(pgc_command_tbl_t *cmd_tbl);
-static void ifoFree_PGCIT_internal(pgcit_t **pgcit);
+static void ifoFree_PGCIT_internal(pgcit_t *pgcit);
static inline int DVDFileSeekForce_( dvd_file_t *dvd_file, uint32_t offset, int force_size ) {
return (DVDFileSeekForce(dvd_file, (int)offset, force_size) == (int)offset);
@@ -2194,26 +2194,24 @@ int ifoRead_FP_PGC(ifo_handle_t *ifofile) {
ifofile->first_play_pgc->ref_count = 1;
if(!ifoRead_PGC(ifofile, ifofile->first_play_pgc,
ifofile->vmgi_mat->first_play_pgc)) {
- ifoFree_PGC(&ifofile->first_play_pgc);
+ ifoFree_PGC(ifofile->first_play_pgc);
+ ifofile->first_play_pgc = NULL;
return 0;
}
return 1;
}
-static void ifoFree_PGC(pgc_t **pgc) {
- if(pgc && *pgc && (--(*pgc)->ref_count) <= 0) {
- ifoFree_PGC_COMMAND_TBL((*pgc)->command_tbl);
- if((*pgc)->program_map)
- free((*pgc)->program_map);
- if((*pgc)->cell_playback)
- free((*pgc)->cell_playback);
- if((*pgc)->cell_position)
- free((*pgc)->cell_position);
- free(*pgc);
- }
- if (pgc) {
- *pgc = NULL;
+static void ifoFree_PGC(pgc_t *pgc) {
+ if(pgc && (--pgc->ref_count) <= 0) {
+ ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
+ if(pgc->program_map)
+ free(pgc->program_map);
+ if(pgc->cell_playback)
+ free(pgc->cell_playback);
+ if(pgc->cell_position)
+ free(pgc->cell_position);
+ free(pgc);
}
}
@@ -2222,7 +2220,8 @@ void ifoFree_FP_PGC(ifo_handle_t *ifofile) {
return;
if(ifofile->first_play_pgc) {
- ifoFree_PGC(&ifofile->first_play_pgc);
+ ifoFree_PGC(ifofile->first_play_pgc);
+ ifofile->first_play_pgc = NULL;
}
}
@@ -3136,7 +3135,8 @@ static int ifoRead_PGCIT_internal(ifo_handle_t *ifofile, pgcit_t *pgcit,
if(!pgcit->pgci_srp[i].pgc) {
int j;
for(j = 0; j < i; j++) {
- ifoFree_PGC(&pgcit->pgci_srp[j].pgc);
+ ifoFree_PGC(pgcit->pgci_srp[j].pgc);
+ pgcit->pgci_srp[j].pgc = NULL;
}
goto fail;
}
@@ -3157,18 +3157,17 @@ fail:
return 0;
}
-static void ifoFree_PGCIT_internal(pgcit_t **pgcit) {
- if(pgcit && *pgcit && (--(*pgcit)->ref_count <= 0)) {
+static void ifoFree_PGCIT_internal(pgcit_t *pgcit) {
+ if(pgcit && (--pgcit->ref_count <= 0)) {
int i;
- for(i = 0; i < (*pgcit)->nr_of_pgci_srp; i++)
+ for(i = 0; i < pgcit->nr_of_pgci_srp; i++)
{
- ifoFree_PGC(&(*pgcit)->pgci_srp[i].pgc);
+ ifoFree_PGC(pgcit->pgci_srp[i].pgc);
+ pgcit->pgci_srp[i].pgc = NULL;
}
- free((*pgcit)->pgci_srp);
- free(*pgcit);
+ free(pgcit->pgci_srp);
+ free(pgcit);
}
- if (pgcit)
- *pgcit = NULL;
}
void ifoFree_PGCIT(ifo_handle_t *ifofile) {
@@ -3176,7 +3175,8 @@ void ifoFree_PGCIT(ifo_handle_t *ifofile) {
return;
if(ifofile->vts_pgcit) {
- ifoFree_PGCIT_internal(&ifofile->vts_pgcit);
+ ifoFree_PGCIT_internal(ifofile->vts_pgcit);
+ ifofile->vts_pgcit = NULL;
}
}
@@ -3294,7 +3294,8 @@ int ifoRead_PGCI_UT(ifo_handle_t *ifofile) {
if(!pgci_ut->lu[i].pgcit) {
unsigned int j;
for(j = 0; j < i; j++) {
- ifoFree_PGCIT_internal(&pgci_ut->lu[j].pgcit);
+ ifoFree_PGCIT_internal(pgci_ut->lu[j].pgcit);
+ pgci_ut->lu[j].pgcit = NULL;
}
free(pgci_ut->lu);
free(pgci_ut);
@@ -3307,7 +3308,8 @@ int ifoRead_PGCI_UT(ifo_handle_t *ifofile) {
+ pgci_ut->lu[i].lang_start_byte)) {
unsigned int j;
for(j = 0; j <= i; j++) {
- ifoFree_PGCIT_internal(&pgci_ut->lu[j].pgcit);
+ ifoFree_PGCIT_internal(pgci_ut->lu[j].pgcit);
+ pgci_ut->lu[j].pgcit = NULL;
}
free(pgci_ut->lu);
free(pgci_ut);
@@ -3330,7 +3332,8 @@ void ifoFree_PGCI_UT(ifo_handle_t *ifofile) {
unsigned int i;
for(i = 0; i < ifofile->pgci_ut->nr_of_lus; i++) {
- ifoFree_PGCIT_internal(&ifofile->pgci_ut->lu[i].pgcit);
+ ifoFree_PGCIT_internal(ifofile->pgci_ut->lu[i].pgcit);
+ ifofile->pgci_ut->lu[i].pgcit = NULL;
}
free(ifofile->pgci_ut->lu);
free(ifofile->pgci_ut);
View it on GitLab: https://code.videolan.org/videolan/libdvdread/-/commit/64201466a2e375606887a0778351a55f3a0e5844
--
View it on GitLab: https://code.videolan.org/videolan/libdvdread/-/commit/64201466a2e375606887a0778351a55f3a0e5844
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the libdvdnav-devel
mailing list