Return Error Strings Good Code: int perform_backup(char* from_file, char* to_file, char** error_msg) { int success = 0; /* assume failure. */ static char error_buffer[1024]; /* buffer for returned */ /* error messages. */ if (error_msg) /* put buffer's address in */ *error_msg = error_buffer; /* error_msg parameter. */ FILE* f_from = fopen(from_file, "r"); if (f_from) { FILE* f_to = fopen(to_file, "w"); if (f_to) { success = copy_file(f_from, f_to, error_msg); fclose(f_from); fclose(f_to); } else sprintf(error_buffer, "Cannot open file '%s' for writing - %s", to_file, strerror(errno)); } else sprintf(error_buffer, "Cannot open file '%s' - %s", from_file, strerror(errno)); return success; }