main: Fix renaming of dumped images

Some information (device, hwrev or version string) does not have to be available.
This commit is contained in:
Pali Rohár committed 2021-05-02 13:36:56 +02:00
1 parent 5c0720da32
commit ca035e2ec1
1 file changed
+31 -7
+31 -7
View File
@@ -426,6 +426,8 @@ int main(int argc, char **argv) {
int i; int i;
char buf[512]; char buf[512];
char * ptr = NULL; char * ptr = NULL;
char * ptr1 = NULL;
char * ptr2 = NULL;
char * tmp = NULL; char * tmp = NULL;
char nolo_ver[512]; char nolo_ver[512];
@@ -1036,9 +1038,9 @@ int main(int argc, char **argv) {
/* filter images by device & hwrev */ /* filter images by device & hwrev */
if ( detected_device ) if ( detected_device )
filter_images_by_device(dev->detected_device, &image_first); filter_images_by_device(dev->detected_device, &image_first);
if ( detected_hwrev ) if ( detected_hwrev > 0 )
filter_images_by_hwrev(dev->detected_hwrev, &image_first); filter_images_by_hwrev(dev->detected_hwrev, &image_first);
if ( fiasco_in && ( detected_device || detected_hwrev ) ) if ( fiasco_in && ( detected_device || detected_hwrev > 0 ) )
fiasco_in->first = image_first; fiasco_in->first = image_first;
/* set kernel and initfs images for loading */ /* set kernel and initfs images for loading */
@@ -1265,7 +1267,8 @@ int main(int argc, char **argv) {
continue; continue;
buf[0] = 0; buf[0] = 0;
snprintf(buf, sizeof(buf), "%hd", dev->detected_hwrev); if ( dev->detected_hwrev > 0 )
snprintf(buf, sizeof(buf), "%hd", dev->detected_hwrev);
switch ( i ) { switch ( i ) {
case IMAGE_2ND: case IMAGE_2ND:
@@ -1366,7 +1369,20 @@ int main(int argc, char **argv) {
} }
buf[0] = 0; buf[0] = 0;
snprintf(buf, sizeof(buf), "%s-%s:%hd_%s", image_type_to_string(i), device_to_string(dev->detected_device), dev->detected_hwrev, ptr); snprintf(buf, sizeof(buf), "%s", image_type_to_string(i));
ptr1 = buf + strlen(buf);
if ( dev->detected_device ) {
snprintf(ptr1, sizeof(buf)-(ptr1-buf), "-%s", device_to_string(dev->detected_device));
ptr1 += strlen(ptr1);
}
if ( dev->detected_hwrev > 0 )
snprintf(ptr1, sizeof(buf)-(ptr1-buf), ":%hd", dev->detected_hwrev);
ptr2 = ptr1 + strlen(ptr1);
if ( ptr && ptr[0] )
snprintf(ptr2, sizeof(buf)-(ptr2-buf), "_%s", ptr);
rename_ret = rename(image_tmp_name(i), buf); rename_ret = rename(image_tmp_name(i), buf);
rename_errno = errno; rename_errno = errno;
@@ -1381,13 +1397,21 @@ int main(int argc, char **argv) {
errno = rename_errno; errno = rename_errno;
ERROR_INFO("Renaming failed"); ERROR_INFO("Renaming failed");
buf[0] = 0; *ptr2 = 0;
snprintf(buf, sizeof(buf), "%s-%s_%s", image_type_to_string(i), device_to_string(dev->detected_device), ptr);
printf("Trying to rename %s image file to %s...\n", image_type_to_string(i), buf); printf("Trying to rename %s image file to %s...\n", image_type_to_string(i), buf);
if ( rename(image_tmp_name(i), buf) < 0 ) if ( rename(image_tmp_name(i), buf) < 0 ) {
ERROR_INFO("Renaming failed"); ERROR_INFO("Renaming failed");
*ptr1 = 0;
printf("Trying to rename %s image file to %s...\n", image_type_to_string(i), buf);
if ( rename(image_tmp_name(i), buf) < 0 )
ERROR_INFO("Renaming failed");
}
} }
} }