Index: trunk/src/hid_cam.c =================================================================== --- trunk/src/hid_cam.c (revision 24108) +++ trunk/src/hid_cam.c (revision 24109) @@ -107,7 +107,7 @@ } -void pcb_derive_default_filename(const char *pcbfile, pcb_hid_attribute_t * filename_attrib, const char *suffix) +char *pcb_derive_default_filename_(const char *pcbfile, const char *suffix) { char *buf; const char *pf; @@ -133,12 +133,18 @@ } } strcat(buf, suffix); - if (filename_attrib->default_val.str_value) - free((void *) filename_attrib->default_val.str_value); - filename_attrib->default_val.str_value = buf; } + + return buf; } +void pcb_derive_default_filename(const char *pcbfile, pcb_hid_attribute_t * filename_attrib, const char *suffix) +{ + if (filename_attrib->default_val.str_value) + free((char *)filename_attrib->default_val.str_value); + filename_attrib->default_val.str_value = pcb_derive_default_filename_(pcbfile, suffix); +} + /* remove leading and trailing whitespace */ static char *strip(char *s) { Index: trunk/src/hid_cam.h =================================================================== --- trunk/src/hid_cam.h (revision 24108) +++ trunk/src/hid_cam.h (revision 24109) @@ -84,4 +84,8 @@ look it up. Copies result in dest (which should be at least PCB_DERIVE_FN_SUFF_LEN bytes wide). */ void pcb_derive_default_filename(const char *pcbfile, pcb_hid_attribute_t * filename_attrib, const char *suffix); +/* Same as pcb_derive_default_filename() but returns an allocated string + directly, instead of manipulating an attribute */ +char *pcb_derive_default_filename_(const char *pcbfile, const char *suffix); + #endif