From cc30f4043b0d6bacc636853a6cc0c667d8afabca Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 8 May 2011 17:47:43 +0000 Subject: [PATCH] Replaced some large local variables by other means --- xorriso/cmp_update.c | 5 ++++- xorriso/drive_mgt.c | 19 ++++++++++++++----- xorriso/iso_img.c | 5 ++++- xorriso/opts_a_c.c | 5 ++++- xorriso/sort_cmp.c | 13 ++++++++++--- xorriso/text_io.c | 4 +++- xorriso/write_run.c | 12 ++++++++++-- xorriso/xorriso_timestamp.h | 2 +- 8 files changed, 50 insertions(+), 15 deletions(-) diff --git a/xorriso/cmp_update.c b/xorriso/cmp_update.c index b7902cf2..430238f3 100644 --- a/xorriso/cmp_update.c +++ b/xorriso/cmp_update.c @@ -786,7 +786,7 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, struct stat stbuf; struct SplitparT *split_parts= NULL; int split_count= 0; - char part_path[SfileadrL], *part_name; + char *part_path= NULL, *part_name; int partno, total_parts, new_total_parts; off_t offset, bytes, total_bytes, disk_size, first_bytes; @@ -798,6 +798,8 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, ret= 3; goto ex; } + Xorriso_alloc_meM(part_path, char, SfileadrL); + if((flag & 2) && !(compare_result & 2)) { ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, node, !(compare_result & 1)); @@ -1001,6 +1003,7 @@ overwrite:; ex:; if(split_parts!=NULL) Splitparts_destroy(&split_parts, split_count, 0); + Xorriso_free_meM(part_path); if(ret<=0) return(ret); if(deleted) diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index 906053b9..840251e7 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -1080,13 +1080,15 @@ ex:; int Xorriso_show_devices(struct XorrisO *xorriso, int flag) { - char adr[BURN_DRIVE_ADR_LEN]; - int i, j, max_dev_len= 1, pad; + char *adr= NULL; + int i, j, max_dev_len= 1, pad, ret; struct burn_drive_info *drive_list= NULL; unsigned int drive_count; char *respt, perms[8]; struct stat stbuf; + Xorriso_alloc_meM(adr, char, BURN_DRIVE_ADR_LEN); + sprintf(xorriso->info_text, "Beginning to scan for devices ...\n"); Xorriso_info(xorriso,0); @@ -1103,7 +1105,7 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag) sprintf(xorriso->info_text, "No drives found"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); - return(0); + {ret= 0; goto ex;} } sprintf(xorriso->info_text, "Full drive scan done\n"); Xorriso_info(xorriso,0); @@ -1147,7 +1149,10 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag) burn_drive_info_free(drive_list); Xorriso_process_msg_queues(xorriso,0); - return(1); + ret= 1; +ex:; + Xorriso_free_meM(adr); + return(ret); } @@ -1580,13 +1585,16 @@ int Xorriso_check_md5_range(struct XorrisO *xorriso, off_t start_lba, struct burn_drive_info *dinfo= NULL; struct burn_drive *drive= NULL; off_t pos, data_count, to_read; - char data[64 * 1024], data_md5[16]; + char *data= NULL, data_md5[16]; void *ctx = NULL; ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, "on attempt to check session MD5 checksum", 0); if(ret <= 0) goto ex; + + Xorriso_alloc_meM(data, char, 64 * 1024); + ret= iso_md5_start(&ctx); if(ret <= 0) { Xorriso_no_malloc_memory(xorriso, NULL, 0); @@ -1614,6 +1622,7 @@ ex:; Xorriso_process_msg_queues(xorriso,0); if(ctx != NULL) iso_md5_end(&ctx, data_md5); + Xorriso_free_meM(data); return(ret); } diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index dcae68a8..873ef4cb 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -705,7 +705,7 @@ int Xorriso_show_boot_info(struct XorrisO *xorriso, int flag) unsigned int mbr_lba= 0; off_t lb0_count; char *respt, *path; - unsigned char lb0[2048]; + unsigned char *lb0= NULL; struct burn_drive_info *dinfo; struct burn_drive *drive; IsoImage *image= NULL; @@ -714,6 +714,8 @@ int Xorriso_show_boot_info(struct XorrisO *xorriso, int flag) IsoBoot *bootcat_node; Xorriso_alloc_meM(path, char, SfileadrL); + Xorriso_alloc_meM(lb0, unsigned char, 2048); + respt= xorriso->result_line; if(xorriso->boot_count > 0) { @@ -837,6 +839,7 @@ ex:; if(image != NULL) iso_image_unref(image); /* release obtained reference */ Xorriso_free_meM(path); + Xorriso_free_meM(lb0); return(ret); } diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index d70e5a74..b7e94e84 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -1396,7 +1396,7 @@ int Xorriso_option_check_media(struct XorrisO *xorriso, { int ret, i, count, lba, blocks, quality, pass, was_md5= 0, was_event= 0; int end_idx, old_idx, os_errno; - char quality_name[80], head_buffer[64*1024]; + char quality_name[80], *head_buffer= NULL; struct SpotlisT *spotlist= NULL; struct CheckmediajoB *job= NULL; struct FindjoB *findjob= NULL; @@ -1406,6 +1406,8 @@ int Xorriso_option_check_media(struct XorrisO *xorriso, end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 1); (*idx)= end_idx; + Xorriso_alloc_meM(head_buffer, char, 64 * 1024); + ret= Checkmediajob_new(&job, 0); if(ret <= 0) goto ex; @@ -1531,6 +1533,7 @@ ex:; } Spotlist_destroy(&spotlist, 0); Checkmediajob_destroy(&job, 0); + Xorriso_free_meM(head_buffer); return(ret); } diff --git a/xorriso/sort_cmp.c b/xorriso/sort_cmp.c index e92eacf2..9ffc6e3d 100644 --- a/xorriso/sort_cmp.c +++ b/xorriso/sort_cmp.c @@ -146,7 +146,7 @@ int Xorriso__get_di(IsoNode *node, dev_t *dev, ino_t *ino, int flag) { int ret, i, i_end, imgid, error_code; size_t value_length= 0; - char *value= NULL, msg[ISO_MSGS_MESSAGE_LEN], severity[80]; + char *value= NULL, *msg= NULL, severity[80]; unsigned char *vpt; static char *name= "isofs.di"; @@ -155,13 +155,16 @@ int Xorriso__get_di(IsoNode *node, dev_t *dev, ino_t *ino, int flag) Xorriso_get_di_counteR++; #endif /* NIX */ + msg= TSOB_FELD(char, ISO_MSGS_MESSAGE_LEN); + if(msg == NULL) + {ret= -1; goto ex;} *dev= 0; *ino= 0; ret= iso_node_lookup_attr(node, name, &value_length, &value, 0); if(ret <= 0) { /* Drop any pending messages because there is no xorriso to take them */ iso_obtain_msgs("NEVER", &error_code, &imgid, msg, severity); - return(ret); + goto ex; } vpt= (unsigned char *) value; for(i= 1; i <= vpt[0] && i < value_length; i++) @@ -170,7 +173,11 @@ int Xorriso__get_di(IsoNode *node, dev_t *dev, ino_t *ino, int flag) for(i++; i < i_end && i < value_length; i++) *ino= ((*ino) << 8) | vpt[i]; free(value); - return(1); + ret= 1; +ex:; + if(msg != NULL) + free(msg); + return(ret); } diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 8c69fda4..76af3b35 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -1111,13 +1111,14 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) int part_table_implicit= 0; char *line, *sfe= NULL, mode[80], *form, *treatment; char *in_pt, *out_pt, *nl_charset, *local_charset, *mode_pt; - char *dev_filter= NULL, xorriso_id[129]; + char *dev_filter= NULL, *xorriso_id= NULL; static char channel_prefixes[4][4]= {".","R","I","M"}; static char load_names[][20]= {"auto", "session", "track", "lba", "volid"}; static int max_load_mode= 4; struct Xorriso_lsT *paths, *leafs, *s, *plst, *vlst; Xorriso_alloc_meM(sfe, char, 5 * SfileadrL + 80); + Xorriso_alloc_meM(xorriso_id, char, 129); no_defaults= flag&1; line= xorriso->result_line; @@ -1974,6 +1975,7 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) ret= 1; ex:; Xorriso_free_meM(sfe); + Xorriso_free_meM(xorriso_id); return(ret); } diff --git a/xorriso/write_run.c b/xorriso/write_run.c index d3721cde..de60e576 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -252,7 +252,7 @@ int Xorriso_set_system_area(struct XorrisO *xorriso, struct burn_drive *drive, int ret, options, system_area_options, iso_lba= -1, start_lba, image_blocks; char volid[33]; FILE *fp= NULL; - char buf[32768], *bufpt= NULL; + char *buf= NULL, *bufpt= NULL; off_t hd_lba; unsigned char *ub; ElToritoBootImage *bootimg; @@ -260,6 +260,7 @@ int Xorriso_set_system_area(struct XorrisO *xorriso, struct burn_drive *drive, uint32_t offst; enum burn_disc_status state; + Xorriso_alloc_meM(buf, char, 32768); system_area_options= xorriso->system_area_options; memset(buf, 0, 32768); if(xorriso->system_area_disk_path[0] == 0) { @@ -379,6 +380,7 @@ do_set:; ex:; if(fp != NULL && fp != stdin) fclose(fp); + Xorriso_free_meM(buf); return(ret); } @@ -1896,7 +1898,7 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode, char *npt, *cpt; int l, was, value, ret; struct isoburn_imgen_opts *opts= NULL; - char msg[160]; + char *msg= NULL; off_t limit; was= xorriso->relax_compliance; @@ -2065,10 +2067,13 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode, if(xorriso->file_size_limit < Xorriso_default_file_size_limiT) xorriso->file_size_limit= Xorriso_default_file_size_limiT; } else { + Xorriso_alloc_meM(msg, char, 160); sprintf(msg, "-compliance iso_9660_level=%d : Only 1, 2, or 3 are permissible", value); Xorriso_msgs_submit(xorriso, 0, msg, 0, "FAILURE", 0); + Xorriso_free_meM(msg); + msg= NULL; xorriso->relax_compliance= was; return(0); } @@ -2103,6 +2108,9 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode, } } return(1); +ex:; + Xorriso_free_meM(msg); + return(ret); } diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 73dcde63..815d8ce3 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2011.05.08.083929" +#define Xorriso_timestamP "2011.05.08.174805"