+static int ventoy_windows_fill_udf_short_ad(grub_file_t isofile, grub_uint32_t curpos,
+ wim_tail *wim_data, grub_uint32_t new_wim_size)
+{
+ int i;
+ grub_uint32_t total = 0;
+ grub_uint32_t left_size = 0;
+ ventoy_udf_override *udf = NULL;
+ ventoy_udf_override tmp[4];
+
+ grub_memset(tmp, 0, sizeof(tmp));
+ grub_file_seek(isofile, wim_data->override_offset);
+ grub_file_read(isofile, tmp, sizeof(tmp));
+
+ left_size = new_wim_size;
+ udf = (ventoy_udf_override *)wim_data->override_data;
+
+ for (i = 0; i < 4; i++)
+ {
+ total += tmp[i].length;
+ if (total >= wim_data->wim_raw_size)
+ {
+ udf->length = left_size;
+ udf->position = curpos;
+ return 0;
+ }
+ else
+ {
+ udf->length = tmp[i].length;
+ udf->position = curpos;
+ }
+
+ left_size -= tmp[i].length;
+ curpos += udf->length / 2048;
+ udf++;
+ wim_data->override_len += sizeof(ventoy_udf_override);
+ }
+
+ debug("######## Too many udf ad ######\n");
+ return 1;
+}
+
+static void ventoy_windows_fill_override_data_udf(grub_file_t isofile, void *override)