int CreateFileOutputW( REMUXER *pRemuxer, wchar_t* pFileName, int nOutputFormat, int nMaxTrackNum) { //pRemuxer->output_file = fopen( pFileName, "wb" ); #ifdef WIN32 //pRemuxer->output_file = FOPEN( pFileName, _O_WRONLY|_O_BINARY|_O_CREAT, _SH_DENYNO , _S_IREAD|_S_IWRITE ); pRemuxer->output_file = _wsopen( (wchar_t*)pFileName, _O_RDONLY|_O_BINARY, _SH_DENYNO , _S_IREAD|_S_IWRITE ); #else pRemuxer->output_file = open( (char*)pFileName, O_WRONLY|O_CREAT, 0666 ); #endif if ( pRemuxer->output_file ) { SageLog(( _LOG_TRACE, 3, TEXT("Output file %s"), pFileName )); } else return 0; pRemuxer->output_track[0] = CreateTracks(nMaxTrackNum); pRemuxer->output_track[0]->track_type = nOutputFormat; if ( IS_PS_TYPE( nOutputFormat ) ) { int build_header_in_buffer; //if es block has space to build a PACK+PES build_header_in_buffer = SourceIsTSType( pRemuxer->demuxer ); pRemuxer->ps_builder = CreatePSBuilder( pRemuxer->output_track[0], ES_PACKET_SIZE, build_header_in_buffer ); pRemuxer->ps_builder->dumper.stream_dumper = (DUMP)PSOutputDataFileDumper; pRemuxer->ps_builder->dumper.stream_dumper_context = pRemuxer; } else if ( IS_TS_TYPE(nOutputFormat) ) { pRemuxer->ts_builder = CreateTSBuilder( pRemuxer->output_track[0], nOutputFormat ); pRemuxer->ts_builder->dumper.stream_dumper = (DUMP)TSOutputDataFileDumper; pRemuxer->ts_builder->dumper.stream_dumper_context = pRemuxer; } return 1; }
static int win32_open(const char *filename_utf8, int oflag, int pmode) { int fd; int num_chars; wchar_t *filename_w; /* convert UTF-8 to wide chars */ num_chars = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filename_utf8, -1, NULL, 0); if (num_chars <= 0) goto fallback; filename_w = av_mallocz_array(num_chars, sizeof(wchar_t)); if (!filename_w) { errno = ENOMEM; return -1; } MultiByteToWideChar(CP_UTF8, 0, filename_utf8, -1, filename_w, num_chars); fd = _wsopen(filename_w, oflag, SH_DENYNO, pmode); av_freep(&filename_w); if (fd != -1 || (oflag & O_CREAT)) return fd; fallback: /* filename may be in CP_ACP */ return _sopen(filename_utf8, oflag, SH_DENYNO, pmode); }
/** * Check if given file can be opened with exclusive write access. * * @param path path to the file * @return 1 if file can be opened, 0 otherwise */ int can_open_exclusive(const char* path) { int i, res = 0; for(i = 0; i < 2 && res == 0; i++) { int fd; wchar_t* wpath = c2w(path, i); if(wpath == NULL) continue; fd = _wsopen(wpath, _O_RDONLY | _O_BINARY, _SH_DENYWR, 0); if(fd >= 0) { res = 1; _close(fd); } free(wpath); } return res; }
static int win32_open(const char *filename_utf8, int oflag, int pmode) { int fd; wchar_t *filename_w; /* convert UTF-8 to wide chars */ if (utf8towchar(filename_utf8, &filename_w)) return -1; if (!filename_w) goto fallback; fd = _wsopen(filename_w, oflag, SH_DENYNO, pmode); av_freep(&filename_w); if (fd != -1 || (oflag & O_CREAT)) return fd; fallback: /* filename may be in CP_ACP */ return _sopen(filename_utf8, oflag, SH_DENYNO, pmode); }
/* {{{ mysql_local_infile_init */ static int mysql_local_infile_init(void **ptr, const char *filename, void *userdata) { MYSQL_INFILE_INFO *info; int CodePage= -1; #ifdef _WIN32 MYSQL *mysql= (MYSQL *)userdata; wchar_t *w_filename= NULL; int Length; #endif DBUG_ENTER("mysql_local_infile_init"); info = (MYSQL_INFILE_INFO *)my_malloc(sizeof(MYSQL_INFILE_INFO), MYF(MY_ZEROFILL)); if (!info) { DBUG_RETURN(1); } *ptr = info; info->filename = filename; #ifdef _WIN32 if (mysql) CodePage= madb_get_windows_cp(mysql->charset->csname); #endif if (CodePage == -1) { #ifdef _WIN32 info->fd= sopen(info->filename, _O_RDONLY | _O_BINARY, _SH_DENYNO , _S_IREAD | _S_IWRITE); #else info->fd = open(info->filename, O_RDONLY | O_BINARY, my_umask); #endif my_errno= errno; } #ifdef _WIN32 else { if ((Length= MultiByteToWideChar(CodePage, 0, info->filename, (int)strlen(info->filename), NULL, 0))) { if (!(w_filename= (wchar_t *)my_malloc((Length + 1) * sizeof(wchar_t), MYF(MY_ZEROFILL)))) { info->error_no= CR_OUT_OF_MEMORY; my_snprintf((char *)info->error_msg, sizeof(info->error_msg), ER(CR_OUT_OF_MEMORY)); DBUG_RETURN(1); } Length= MultiByteToWideChar(CodePage, 0, info->filename, (int)strlen(info->filename), w_filename, (int)Length); } if (Length == 0) { my_free(w_filename); info->error_no= CR_UNKNOWN_ERROR; my_snprintf((char *)info->error_msg, sizeof(info->error_msg), "Character conversion error: %d", GetLastError()); DBUG_RETURN(1); } info->fd= _wsopen(w_filename, _O_RDONLY | _O_BINARY, _SH_DENYNO , _S_IREAD | _S_IWRITE); my_errno= errno; my_free(w_filename); } #endif if (info->fd < 0) { info->error_no = my_errno; my_snprintf((char *)info->error_msg, sizeof(info->error_msg), EE(EE_FILENOTFOUND), filename, info->error_no); DBUG_RETURN(1); } DBUG_RETURN(0); }