BOOL freerdp_client_write_rdp_file(const rdpFile* file, const char* name, BOOL unicode) { FILE* fp; int length; char* buffer; int status = 0; WCHAR* unicodestr = NULL; length = (int) freerdp_client_write_rdp_file_buffer(file, NULL, 0); if (length < 0) { DEBUG_WARN( "freerdp_client_write_rdp_file: error determining buffer size.\n"); return FALSE; } buffer = (char*) malloc((length + 1) * sizeof(char)); if (freerdp_client_write_rdp_file_buffer(file, buffer, length + 1) != length) { DEBUG_WARN( "freerdp_client_write_rdp_file: error writing to output buffer\n"); free(buffer); return FALSE; } fp = fopen(name, "w+b"); if (fp) { if (unicode) { ConvertToUnicode(CP_UTF8, 0, buffer, length, &unicodestr, 0); /* Write multi-byte header */ fwrite(BOM_UTF16_LE, sizeof(BYTE), 2, fp); fwrite(unicodestr, 2, length, fp); free(unicodestr); } else { fwrite(buffer, 1, length, fp); } status = fflush(fp); status = fclose(fp); } if (buffer) free(buffer); return (status == 0) ? TRUE : FALSE; }
BOOL freerdp_client_write_rdp_file(rdpFile* file, const char* name, BOOL unicode) { int rc = 0; char* buffer; int len, len2; FILE* fp = NULL; WCHAR* unicodestr = NULL; len = freerdp_client_write_rdp_file_buffer(file, NULL, 0); if (len <= 0) { fprintf(stderr, "freerdp_client_write_rdp_file: Error determining buffer size.\n"); return FALSE; } buffer = (char*) malloc((len + 1) * sizeof(char)); len2 = freerdp_client_write_rdp_file_buffer(file, buffer, len + 1); if (len2 == len) { fp = fopen(name, "w+b"); if (fp != NULL) { if (unicode) { ConvertToUnicode(CP_UTF8, 0, buffer, len, &unicodestr, 0); // Write multi-byte header fwrite(BOM_UTF16_LE, sizeof(BYTE), 2, fp); fwrite(unicodestr, 2, len, fp); free(unicodestr); } else { fwrite(buffer, 1, len, fp); } rc = fflush(fp); rc = fclose(fp); } } if (buffer != NULL) free(buffer); return (rc == 0); }