From 88648362c986fc37b89943551342cf7dc39b1624 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Mon, 29 May 2017 15:43:43 +0200 Subject: [PATCH 1/4] Use TCHAR in mp3checker To support unicode characters --- mp3checker/windows/fileinfo.c | 5 ++- mp3checker/windows/fileinfo.h | 2 +- mp3checker/windows/listview.c | 71 +++++++++++++++++---------------- mp3checker/windows/listview.h | 4 +- mp3checker/windows/mp3checker.c | 6 +-- mp3checker/windows/mp3checker.h | 8 ++-- mp3checker/windows/rebar.c | 16 ++++---- mp3checker/windows/rebar.h | 2 +- mp3checker/windows/sort.c | 9 +++-- mpck/bufio.c | 40 ++++++++++--------- mpck/bufio.h | 10 ++++- mpck/checkarguments.c | 32 ++++++++------- mpck/checkarguments.h | 4 ++ mpck/checkfile.c | 6 +-- mpck/checkfile.h | 2 +- mpck/file.c | 12 ++++-- mpck/file.h | 2 +- mpck/mpck.h | 3 ++ 18 files changed, 131 insertions(+), 103 deletions(-) diff --git a/mp3checker/windows/fileinfo.c b/mp3checker/windows/fileinfo.c index 8bd4012..803c169 100644 --- a/mp3checker/windows/fileinfo.c +++ b/mp3checker/windows/fileinfo.c @@ -36,6 +36,7 @@ #include "mp3checker.h" #include "vector.h" +#include #define CVECTORS 26 #define FI_HASH(filename) abs(filename[0]%(CVECTORS)) @@ -76,8 +77,8 @@ FileInfo * FI_GetFile(TCHAR * filename, TCHAR * dirname) { v=fileinfo[FI_HASH(filename)]; while (fi=(FileInfo *)Vector_Get(v, i++)) { - if ((stricmp(filename, fi->filename)==0) - &&(stricmp(dirname, fi->dirname)==0)) { + if ((_tcsicmp(filename, fi->filename)==0) + &&(_tcsicmp(dirname, fi->dirname)==0)) { return fi; } } diff --git a/mp3checker/windows/fileinfo.h b/mp3checker/windows/fileinfo.h index 68d2fd2..66a7f98 100644 --- a/mp3checker/windows/fileinfo.h +++ b/mp3checker/windows/fileinfo.h @@ -28,6 +28,6 @@ BOOL FI_Create(); void FI_Destroy(); void FI_AddFile(FileInfo * fi); -FileInfo * FI_GetFile(char * filename, char * dirname); +FileInfo * FI_GetFile(TCHAR * filename, TCHAR * dirname); FI_GetFileType(WIN32_FIND_DATA * FileData); BOOL FI_FreeAll(void); \ No newline at end of file diff --git a/mp3checker/windows/listview.c b/mp3checker/windows/listview.c index 889a62c..cb911f1 100644 --- a/mp3checker/windows/listview.c +++ b/mp3checker/windows/listview.c @@ -27,6 +27,7 @@ #include "mp3checker.h" #include #include +#include #include "vector.h" #include "fileinfo.h" #include "resource.h" @@ -113,7 +114,7 @@ static BOOL LV_InitColumns(HWND hWndListView) { LVCOLUMN lvc; int iCol; int nElem; - char buf[256]; + TCHAR buf[256]; ColInfo colinfo[]={ /* identifier | alignment | width */ @@ -152,14 +153,14 @@ static BOOL LV_InitColumns(HWND hWndListView) { */ static BOOL LV_UpdateFindFile(WIN32_FIND_DATA * FileData) { FileInfo * fi; - char curdir[MAX_PATH]; + TCHAR curdir[MAX_PATH]; GetCurrentDirectory(sizeof(curdir), curdir); fi=FI_GetFile(FileData->cFileName, curdir); if (fi==NULL) { /* no information is available for this file */ fi=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FileInfo)); - strcpy(fi->filename, FileData->cFileName); - strcpy(fi->dirname, curdir); + _tcscpy(fi->filename, FileData->cFileName); + _tcscpy(fi->dirname, curdir); fi->filesize=((UINT64)FileData->nFileSizeHigh << 32)+FileData->nFileSizeLow; fi->filetype=FI_GetFileType(FileData); } @@ -213,7 +214,7 @@ static int LV_FindSelected(int start) { } /* does the actual renaming of the file indicated by index */ -BOOL LV_RenameFile(int index, char * newname) { +BOOL LV_RenameFile(int index, TCHAR * newname) { FileInfo * fi; BOOL retval; @@ -225,7 +226,7 @@ BOOL LV_RenameFile(int index, char * newname) { retval=MoveFile(fi->filename, newname); if (retval) { /* update vector */ - strcpy(fi->filename, newname); + _tcscpy(fi->filename, newname); } else { ErrorBox(IDS_RENAMEFAILED, MB_OK | MB_ICONEXCLAMATION); } @@ -259,7 +260,7 @@ static BOOL LV_AddItem(HWND hWndListView, FileInfo * fi, int item) { static BOOL LV_UpdateDirItem(HWND hWndListView, FileInfo * fi, int item) { - char buf[20]; + TCHAR buf[20]; LVITEM lv; int iRes; @@ -274,7 +275,7 @@ static BOOL LV_UpdateDirItem(HWND hWndListView, FileInfo * fi, int item) { /* result */ lv.iSubItem=COL_RESULT; - sprintf(buf, "%d/%d", fi->dirinfo->cGood, fi->dirinfo->cIsMP3); + _stprintf(buf, TEXT("%d/%d"), fi->dirinfo->cGood, fi->dirinfo->cIsMP3); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; @@ -283,7 +284,7 @@ static BOOL LV_UpdateDirItem(HWND hWndListView, FileInfo * fi, int item) { } static BOOL LV_UpdateFileItem(HWND hWndListView, FileInfo * fi, int item) { - char buf[20]; + TCHAR buf[20]; LVITEM lv; int iRes; @@ -320,14 +321,14 @@ static BOOL LV_UpdateFileItem(HWND hWndListView, FileInfo * fi, int item) { /* layer */ lv.iSubItem=COL_LAYER; - sprintf(buf, "%d", fi->info->layer); + _stprintf(buf, TEXT("%d"), fi->info->layer); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; /* bitrate */ lv.iSubItem=COL_BITRATE; - sprintf(buf, "%d bps", fi->info->bitrate); + _stprintf(buf, TEXT("%d bps"), fi->info->bitrate); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; @@ -335,30 +336,30 @@ static BOOL LV_UpdateFileItem(HWND hWndListView, FileInfo * fi, int item) { /* vbr/cbr */ lv.iSubItem=COL_VBR; if (fi->info->vbr) { - lv.pszText="VBR"; + lv.pszText=TEXT("VBR"); } else { - lv.pszText="CBR"; + lv.pszText=TEXT("CBR"); } iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; /* samplerate */ lv.iSubItem=COL_SAMPLERATE; - sprintf(buf, "%d Hz", fi->info->samplerate); + _stprintf(buf, TEXT("%d Hz"), fi->info->samplerate); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; /* frames */ lv.iSubItem=COL_FRAMES; - sprintf(buf, "%d", fi->info->frames); + _stprintf(buf, TEXT("%d"), fi->info->frames); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; /* time */ lv.iSubItem=COL_TIME; - sprintf(buf, "%d:%02d", fi->info->time/60, fi->info->time%60); + _stprintf(buf, TEXT("%d:%02d"), fi->info->time/60, fi->info->time%60); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; @@ -366,7 +367,7 @@ static BOOL LV_UpdateFileItem(HWND hWndListView, FileInfo * fi, int item) { /* size */ lv.iSubItem=COL_SIZE; - sprintf(buf, "%I64u KiB", fi->filesize/1024); + _stprintf(buf, TEXT("%I64u KiB"), fi->filesize/1024); lv.pszText=buf; iRes=ListView_SetItem(hWndListView, &lv); if (!iRes) return FALSE; @@ -459,7 +460,7 @@ BOOL LV_ScanDir(int item, int * filetype) { fi->dirinfo->cFiles=cTotal; fi->dirinfo->cIsMP3=cIsMP3; - iRes=SetCurrentDirectory(".."); + iRes = SetCurrentDirectory(TEXT("..")); LV_Refresh(); return TRUE; @@ -567,19 +568,19 @@ BOOL LV_ActivateSelected() { BOOL LV_OpenSelected() { int index=-1; FileInfo * fi; - char filename[512]; + TCHAR filename[512]; if (LV_GetSelectedCount()<1) return FALSE; while (-1!=(index=LV_FindSelected(index))) { fi=Vector_Get(CurrentVector, index); if (fi==NULL) return FALSE; - strcpy(filename, "\""); - strcat(filename, fi->dirname); - strcat(filename, "\\"); - strcat(filename, fi->filename); - strcat(filename, "\""); - ShellExecute(NULL, "OPEN", fi->filename, NULL, NULL, SW_SHOWDEFAULT); + _tcscpy(filename, TEXT("\"")); + _tcscat(filename, fi->dirname); + _tcscat(filename, TEXT("\\")); + _tcscat(filename, fi->filename); + _tcscat(filename, TEXT("\"")); + ShellExecute(NULL, TEXT("OPEN"), fi->filename, NULL, NULL, SW_SHOWDEFAULT); } return TRUE; } @@ -622,13 +623,13 @@ static BOOL LV_UpdateDirectory(HWND hWndListView) { LV_CleanVector(); - hFind=FindFirstFile("*", &FindFileData); + hFind=FindFirstFile(TEXT("*"), &FindFileData); if (hFind==INVALID_HANDLE_VALUE) { return FALSE; } do { - if (strcmp(FindFileData.cFileName, ".")) LV_UpdateFindFile(&FindFileData); + if (_tcscmp(FindFileData.cFileName, TEXT("."))) LV_UpdateFindFile(&FindFileData); } while (FindNextFile(hFind, &FindFileData)); FindClose(hFind); @@ -653,7 +654,7 @@ BOOL LV_DeleteSelected() { int index=-1; /* file index in CurrentVector */ FileInfo * fi; /* info from CurrentVector */ BOOL retval; /* value of DeleteFile() */ - char * files; /* buffer with files, seperated by NULL */ + TCHAR * files; /* buffer with files, seperated by NULL */ ptrdiff_t offset=0; /* offset of current/next file */ size_t cursize=block_size; /* current size of buffer */ size_t sizeleft=cursize; /* number of bytes left in buffer */ @@ -677,13 +678,13 @@ BOOL LV_DeleteSelected() { */ while (-1!=(index=LV_FindSelected(index))) { fi=Vector_Get(CurrentVector, index); - namelen=strlen(fi->filename); + namelen=_tcslen(fi->filename); while (namelen>=sizeleft) { /* buffer is full, enlarge it */ cursize+=block_size; sizeleft+=block_size; files=HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, files, cursize); } - strncpy(files+offset, fi->filename, namelen); + _tcsncpy(files+offset, fi->filename, namelen); offset+=namelen+1; /* +1 because of trailing zero */ sizeleft-=namelen+1; } @@ -713,7 +714,7 @@ HWND LV_Create(HWND hWndParent) { InitCommonControlsEx(&icex); GetClientRect (hWndParent, &rcl); - hWndListView = CreateWindow (WC_LISTVIEW, "", + hWndListView = CreateWindow (WC_LISTVIEW, TEXT(""), WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 0, 0, rcl.right - rcl.left, rcl.bottom - rcl.top, @@ -793,7 +794,7 @@ int LV_SortColumn(int column) { /* Go one directory up */ BOOL LV_DirUp() { - SetCurrentDirectory(".."); + SetCurrentDirectory(TEXT("..")); LV_Refresh(); return TRUE; } @@ -807,12 +808,12 @@ void LV_Select(int index) { int LV_SelectAll() { FileInfo * fi; int i=0; - char * ext; + TCHAR * ext; while (fi=Vector_Get(CurrentVector, i)) { - ext=strrchr(fi->filename, '.'); + ext= _tcsrchr(fi->filename, '.'); if (ext!=NULL) { - if (0==stricmp(ext, ".mp3")) LV_Select(i); + if (0== _tcsicmp(ext, TEXT(".mp3"))) LV_Select(i); } i++; } diff --git a/mp3checker/windows/listview.h b/mp3checker/windows/listview.h index 57f80b9..1fb944b 100644 --- a/mp3checker/windows/listview.h +++ b/mp3checker/windows/listview.h @@ -35,7 +35,7 @@ BOOL LV_DeleteSelected(void); int LV_GetSelectedCount(void); BOOL LV_StartRename(void); BOOL LV_Refresh(void); -BOOL LV_RenameFile(int index, char * newname); +BOOL LV_RenameFile(int index, TCHAR * newname); BOOL LV_Resize(int width, int height); BOOL LV_ActivateSelected(void); BOOL LV_Activate(int item); @@ -57,7 +57,7 @@ typedef struct { } ColInfo; typedef struct { - char name[255]; + TCHAR name[255]; int filesize; } ItemInfo; diff --git a/mp3checker/windows/mp3checker.c b/mp3checker/windows/mp3checker.c index 77c15c9..0b40c27 100644 --- a/mp3checker/windows/mp3checker.c +++ b/mp3checker/windows/mp3checker.c @@ -145,7 +145,7 @@ INT_PTR CALLBACK AboutProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { } BOOL DirectoryChange() { - char * text; + TCHAR * text; BOOL retval; text=Rebar_GetText(); retval=SetCurrentDirectory(text); @@ -355,8 +355,8 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { int ErrorBox(int iError, UINT uType) { - char text[1024]; - char caption[256]; + TCHAR text[1024]; + TCHAR caption[256]; LoadString(hInst, iError, text, 1023); LoadString(hInst, iError+1, caption, 255); // sprintf(text, "%s\nError #%d.", text, GetLastError()); diff --git a/mp3checker/windows/mp3checker.h b/mp3checker/windows/mp3checker.h index 589b92e..b0b747d 100644 --- a/mp3checker/windows/mp3checker.h +++ b/mp3checker/windows/mp3checker.h @@ -48,8 +48,8 @@ typedef struct _DirInfo { typedef struct _FileInfo FileInfo; struct _FileInfo { int filetype; - char filename[MAX_PATH]; - char dirname[MAX_PATH]; + TCHAR filename[MAX_PATH]; + TCHAR dirname[MAX_PATH]; union { file_info * info; DirInfo * dirinfo; @@ -60,8 +60,8 @@ struct _FileInfo { /* definitions */ -#define MP3CHECKER_CLASSNAME "MP3Checker" -#define MP3CHECKER_TITLE "Checkmate MP3 Checker" /* window name */ +#define MP3CHECKER_CLASSNAME TEXT("MP3Checker") +#define MP3CHECKER_TITLE TEXT("Checkmate MP3 Checker") /* window name */ /* icons */ enum{ diff --git a/mp3checker/windows/rebar.c b/mp3checker/windows/rebar.c index 2aafd3a..d961245 100644 --- a/mp3checker/windows/rebar.c +++ b/mp3checker/windows/rebar.c @@ -70,7 +70,7 @@ HWND Rebar_ComboControl(HWND hWndOwner) { HWND hWndEdit; HFONT font; - hWndCombo = CreateWindow("COMBOBOX", // predefined class + hWndCombo = CreateWindow(TEXT("COMBOBOX"), // predefined class NULL, // no window title WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWN , 0, 0, 100, 200, // set size in WM_SIZE message @@ -93,12 +93,12 @@ HWND Rebar_ComboControl(HWND hWndOwner) { return hWndCombo; } -static BOOL Rebar_SetText(char * text) { +static BOOL Rebar_SetText(TCHAR * text) { return SendMessage(hWndCombo, WM_SETTEXT, 0, (LPARAM)text); } BOOL Rebar_UpdateText() { - static char curdir[MAX_PATH]; + static TCHAR curdir[MAX_PATH]; GetCurrentDirectory(sizeof(curdir), curdir); Rebar_SetText(curdir); UpdateWindow(hWndRebar); @@ -145,7 +145,7 @@ HWND Rebar_Create(HWND hWndOwner) RECT rc; HWND hWndContents; INITCOMMONCONTROLSEX icex; - char locationtext[20]; + TCHAR locationtext[20]; LoadString(hInst, IDS_LOCATION, locationtext, 19); icex.dwSize=sizeof(INITCOMMONCONTROLSEX); @@ -193,14 +193,14 @@ HWND Rebar_Create(HWND hWndOwner) } /* FIXME: static is Evil */ -char * Rebar_GetText() { - static char buf[255]; +TCHAR * Rebar_GetText() { + static TCHAR buf[255]; GetWindowText(hWndCombo, buf, 254); return buf; } void Rebar_Clear() { - SetWindowText(hWndCombo, ""); + SetWindowText(hWndCombo, TEXT("")); } void Rebar_Destroy() { @@ -209,7 +209,7 @@ void Rebar_Destroy() { int Rebar_Select() { int iItem; - char * strPath; + TCHAR * strPath; int iLen; int iRes; diff --git a/mp3checker/windows/rebar.h b/mp3checker/windows/rebar.h index 6e1faf4..3223997 100644 --- a/mp3checker/windows/rebar.h +++ b/mp3checker/windows/rebar.h @@ -28,7 +28,7 @@ HWND Rebar_Create(HWND hWndParent); int Rebar_Height(void); BOOL Rebar_UpdateText(void); -char * Rebar_GetText(void); +TCHAR * Rebar_GetText(void); BOOL Rebar_Resize(int width, int height); void Rebar_Destroy(void); int Rebar_Select(); diff --git a/mp3checker/windows/sort.c b/mp3checker/windows/sort.c index 082304f..627636e 100644 --- a/mp3checker/windows/sort.c +++ b/mp3checker/windows/sort.c @@ -1,6 +1,7 @@ /* sort functions */ #include "mp3checker.h" +#include /* puts directories on top */ static int DirSort(const void * elem1, const void * elem2) { @@ -28,10 +29,10 @@ static int InfoSort(const void * elem1, const void * elem2) { return 0; } -static int NameSort(const char * name1, const char * name2) { - if (0==strcmp(name1, "..")) return -1; - if (0==strcmp(name2, "..")) return 1; - return stricmp(name1, name2); +static int NameSort(const TCHAR * name1, const TCHAR * name2) { + if (0==_tcscmp(name1, TEXT(".."))) return -1; + if (0==_tcscmp(name2, TEXT(".."))) return 1; + return _tcsicmp(name1, name2); } int NormalAscendingSort(const void * elem1, const void * elem2) { diff --git a/mpck/bufio.c b/mpck/bufio.c index 3101b9d..9383873 100644 --- a/mpck/bufio.c +++ b/mpck/bufio.c @@ -67,18 +67,22 @@ #include #endif -static CFILE * ub_fopen(const char * filename, char * mode, size_t filesize); +#ifdef HAVE_TCHAR_H +#include +#endif + +static CFILE * ub_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize); static size_t ub_fread(char *outbuf, size_t size, CFILE *c); static int ub_fseek(CFILE *c, long offset, int whence); static size_t ub_ftell(CFILE *c); static int ub_feof(CFILE *c); static int ub_fclose(CFILE *c); -static CFILE * mm_fopen(const char * filename, char * mode, size_t filesize); +static CFILE * mm_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize); static size_t mm_fread(char *outbuf, size_t size, CFILE *c); static int mm_fclose(CFILE * c); -static CFILE * wb_fopen(const char * filename, char * mode, size_t filesize); +static CFILE * wb_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize); static size_t wb_fread(char *outbuf, size_t size, CFILE *c); static int wb_fseek(CFILE *c, long offset, int whence); static size_t wb_ftell(CFILE *c); @@ -120,12 +124,12 @@ static io_funcs wb_funcs = { #define S_ISREG(mode) (((mode) & S_IFREG)==(S_IFREG)) #endif /* S_ISREG */ -static size_t _cfilesize(const char * filename) { - struct stat _ss; - struct stat * ss=&_ss; +static size_t _cfilesize(const TCHAR * filename) { + struct _stat _ss; + struct _stat * ss=&_ss; int statres; - statres=stat(filename, ss); + statres= _tstat(filename, ss); if (statres != 0) return -1; return ss->st_size; @@ -135,18 +139,18 @@ size_t cfilesize(CFILE * c) { return c->filesize; } -int cisdirectory(const char * filename) { - struct stat _ss; - struct stat * ss=&_ss; +int cisdirectory(const TCHAR * filename) { + struct _stat _ss; + struct _stat * ss=&_ss; int statres; - statres=stat(filename, ss); + statres= _tstat(filename, ss); if (statres != 0) return -1; return S_ISDIR(ss->st_mode); } -CFILE * cfopen(const char * filename, char * mode) { +CFILE * cfopen(const TCHAR * filename, TCHAR * mode) { size_t filesize; CFILE *c; @@ -189,7 +193,7 @@ static size_t readall(int fd, void * buf, size_t count) { return nread; } -static CFILE * wb_fopen(const char * filename, char * mode, size_t filesize) { +static CFILE * wb_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize) { CFILE *c; size_t nread; // TODO use this or remove this int fd; @@ -201,7 +205,7 @@ static CFILE * wb_fopen(const char * filename, char * mode, size_t filesize) { } memset(c, 0, sizeof(CFILE)); - fd=open(filename, O_RDONLY + fd= _topen(filename, O_RDONLY #ifdef _WIN32 | O_BINARY #endif @@ -274,7 +278,7 @@ static int wb_fclose(CFILE * c) { #ifdef _WIN32 -static CFILE * mm_fopen(const char * filename, char * mode, size_t filesize) { +static CFILE * mm_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize) { HANDLE file; HANDLE fileMapping; CFILE *c; @@ -320,7 +324,7 @@ static int mm_fclose(CFILE * c) { } #else // _WIN32 -static CFILE * mm_fopen(const char * filename, char * mode, size_t filesize) { +static CFILE * mm_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize) { CFILE *c; FILE * fp; int fd; @@ -369,10 +373,10 @@ static size_t mm_fread(char * outbuf, size_t size, CFILE * c) { } // unbuffered -static CFILE * ub_fopen(const char * filename, char * mode, size_t filesize) { +static CFILE * ub_fopen(const TCHAR * filename, TCHAR * mode, size_t filesize) { CFILE *c = (CFILE *) malloc(sizeof(CFILE)); if (c == NULL) return NULL; - c->fp = fopen(filename, mode); + c->fp = _tfopen(filename, mode); if (c->fp == NULL) { free(c); diff --git a/mpck/bufio.h b/mpck/bufio.h index f403c62..13d47bd 100644 --- a/mpck/bufio.h +++ b/mpck/bufio.h @@ -5,6 +5,12 @@ #ifdef _WIN32 #include +#else +typedef char TCHAR; +#define _topen open +#define _tfopen fopen +#define _tstat stat +#define _stat stat #endif #ifndef FALSE @@ -36,8 +42,8 @@ typedef struct { /* bufio.c */ size_t cfilesize(CFILE *c); -int cisdirectory(const char *filename); -CFILE *cfopen(const char *filename, char *mode); +int cisdirectory(const TCHAR *filename); +CFILE *cfopen(const TCHAR *filename, TCHAR *mode); // use cfeof instead of feof because feof is a macro which messes things up. struct _io_funcs { diff --git a/mpck/checkarguments.c b/mpck/checkarguments.c index 43933fd..c4a83ef 100644 --- a/mpck/checkarguments.c +++ b/mpck/checkarguments.c @@ -68,6 +68,10 @@ #include #endif +#ifdef HAVE_TCHAR_H +#include +#endif + static errno_t checkargument(filename, total, file) char * filename; @@ -107,26 +111,26 @@ fisdirectory(FindFileData) */ int wildcard_checkfile(wildcardpath, total) - char * wildcardpath; + TCHAR * wildcardpath; total_info * total; { WIN32_FIND_DATA FindFileData; /* struct to store the found file */ HANDLE hFind; int wcplen; /* wildcard path length */ int res; /* function result */ - char * filepart; /* part of wcp with the filename */ - char * realfilename; /* expanded filename */ + TCHAR * filepart; /* part of wcp with the filename */ + TCHAR * realfilename; /* expanded filename */ file_info * file; /* info of this file */ - wcplen=strlen(wildcardpath); - realfilename=(char*)malloc(wcplen+MAXPATH); + wcplen=_tcslen(wildcardpath); + realfilename=(TCHAR*)malloc(wcplen+MAXPATH*sizeof(TCHAR)); if (realfilename == NULL) { error("malloc failed while doing wildcard expansion\n"); return FALSE; } - strcpy(realfilename, wildcardpath); - filepart=strrchr(realfilename, DIRSEP); + _tcscpy(realfilename, wildcardpath); + filepart= _tcsrchr(realfilename, DIRSEP); if (filepart == NULL) { filepart=realfilename; /* no backslash found */ } else { @@ -141,7 +145,7 @@ wildcard_checkfile(wildcardpath, total) file = file_create(); do { - strncpy(filepart, FindFileData.cFileName, MAXPATH); + _tcsncpy(filepart, FindFileData.cFileName, MAXPATH); if (filepart[0] != '.') { if (options_get_recursive() && fisdirectory(&FindFileData)) { recursivecheck(realfilename, total); @@ -182,21 +186,21 @@ checkarguments(argv, total) */ int recursivecheck(dirname, total) - const char *dirname; + const TCHAR *dirname; total_info * total; { - char * wildcarddir; + TCHAR * wildcarddir; int dirlen; - dirlen=strlen(dirname); - wildcarddir=(char *)malloc(dirlen+MAXPATH); + dirlen=_tcslen(dirname); + wildcarddir=(TCHAR *)malloc(dirlen+MAXPATH*sizeof(TCHAR)); if (wildcarddir == NULL) { error("malloc failed"); return FALSE; } - strcpy(wildcarddir, dirname); - strcat(wildcarddir, "\\*"); + _tcscpy(wildcarddir, dirname); + _tcscat(wildcarddir, TEXT("\\*")); wildcard_checkfile(wildcarddir, total); free(wildcarddir); diff --git a/mpck/checkarguments.h b/mpck/checkarguments.h index 04f71b5..63f0532 100644 --- a/mpck/checkarguments.h +++ b/mpck/checkarguments.h @@ -23,5 +23,9 @@ * */ +#ifdef _WIN32 +int recursivecheck(const TCHAR *dirname, total_info *total); +#else int recursivecheck(const char *dirname, total_info *total); +#endif errno_t checkarguments(char **argv, total_info *total); diff --git a/mpck/checkfile.c b/mpck/checkfile.c index 5eadd50..07698ff 100644 --- a/mpck/checkfile.c +++ b/mpck/checkfile.c @@ -119,12 +119,12 @@ static int findlastframe(file) } static errno_t openfile(filename, file) - char * filename; + TCHAR * filename; file_info * file; { errno_t errno_keep; - file->fp = cfopen(filename, "rb"); + file->fp = cfopen(filename, TEXT("rb")); if (file->fp == NULL) { errno_keep = errno; fileerror(filename, strerror(errno_keep)); @@ -136,7 +136,7 @@ static errno_t openfile(filename, file) } errno_t checkfile(filename, file) - char * filename; + TCHAR * filename; file_info * file; { frame_info * frame; diff --git a/mpck/checkfile.h b/mpck/checkfile.h index 67f76e7..a55a69e 100644 --- a/mpck/checkfile.h +++ b/mpck/checkfile.h @@ -23,4 +23,4 @@ * */ -errno_t checkfile(char *filename, file_info *file); +errno_t checkfile(TCHAR *filename, file_info *file); diff --git a/mpck/file.c b/mpck/file.c index 7665b77..cf581a0 100644 --- a/mpck/file.c +++ b/mpck/file.c @@ -41,14 +41,18 @@ #include #endif -const char * +#ifdef HAVE_TCHAR_H +#include +#endif + +const TCHAR * file_strversion(file) const file_info * file; { int version = file->version; - if (version == MPEG_VER_10) return "v1.0"; - else if (version == MPEG_VER_20) return "v2.0"; - else if (version == MPEG_VER_25) return "v2.5"; + if (version == MPEG_VER_10) return TEXT("v1.0"); + else if (version == MPEG_VER_20) return TEXT("v2.0"); + else if (version == MPEG_VER_25) return TEXT("v2.5"); else { error("bug: invalid file version"); abort(); diff --git a/mpck/file.h b/mpck/file.h index 6f6b438..08dde07 100644 --- a/mpck/file.h +++ b/mpck/file.h @@ -70,7 +70,7 @@ int file_update(file_info *file, const frame_info *frame); void file_final(file_info *file); void file_clear(file_info *file); void file_print(const file_info *file); -const char * file_strversion(const file_info * file); +const TCHAR * file_strversion(const file_info * file); #endif diff --git a/mpck/mpck.h b/mpck/mpck.h index 3190d59..3099c73 100644 --- a/mpck/mpck.h +++ b/mpck/mpck.h @@ -46,9 +46,12 @@ #define HAVE_WINDOWS_H #define HAVE_IO_H #define HAVE_FCNTL_H +#define HAVE_TCHAR_H #define DIRSEP '\\' /* directory seperator */ #else /* _WIN32 */ #define DIRSEP '/' +typedef char TCHAR; +#define TEXT(a) a #endif /* _WIN32 */ #ifndef _GNU_SOURCE From d1587c90ddbbd6842f6ec021763fc169f5cf371b Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Thu, 8 Jun 2017 16:20:55 +0200 Subject: [PATCH 2/4] Use consistent signature for recursive_check Even though TCHAR is just char ifndef WIN32 --- mpck/checkarguments.c | 2 +- mpck/checkarguments.h | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/mpck/checkarguments.c b/mpck/checkarguments.c index c4a83ef..9f3391a 100644 --- a/mpck/checkarguments.c +++ b/mpck/checkarguments.c @@ -212,7 +212,7 @@ recursivecheck(dirname, total) /* recursively scans all the files in dirname */ int recursivecheck(dirname, total) - const char *dirname; + const TCHAR *dirname; total_info * total; { DIR * dir; diff --git a/mpck/checkarguments.h b/mpck/checkarguments.h index 63f0532..30d0b16 100644 --- a/mpck/checkarguments.h +++ b/mpck/checkarguments.h @@ -23,9 +23,5 @@ * */ -#ifdef _WIN32 int recursivecheck(const TCHAR *dirname, total_info *total); -#else -int recursivecheck(const char *dirname, total_info *total); -#endif errno_t checkarguments(char **argv, total_info *total); From 5594725739d4da6116be8749cd14bcb51e8606c7 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Thu, 8 Jun 2017 16:22:55 +0200 Subject: [PATCH 3/4] Use TCHAR correctly when adding drives --- mp3checker/windows/rebar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mp3checker/windows/rebar.c b/mp3checker/windows/rebar.c index d961245..33edc0c 100644 --- a/mp3checker/windows/rebar.c +++ b/mp3checker/windows/rebar.c @@ -51,7 +51,7 @@ LRESULT CALLBACK OwnComboWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) static BOOL Combo_AddDrives(HWND hWndCombo) { DWORD drives; int nPos=0; - char strDrive[] = "A:\\"; + TCHAR strDrive[] = TEXT("A:\\"); drives=GetLogicalDrives(); From e82ffda4aa55e0f9f389b839410e51636c258c98 Mon Sep 17 00:00:00 2001 From: Sjoerd Langkemper Date: Thu, 8 Jun 2017 16:23:32 +0200 Subject: [PATCH 4/4] Remove commented code sprintf no longer works with TCHAR, and it was commented anyway --- mp3checker/windows/mp3checker.c | 1 - 1 file changed, 1 deletion(-) diff --git a/mp3checker/windows/mp3checker.c b/mp3checker/windows/mp3checker.c index 0b40c27..c5e6b41 100644 --- a/mp3checker/windows/mp3checker.c +++ b/mp3checker/windows/mp3checker.c @@ -359,7 +359,6 @@ int ErrorBox(int iError, UINT uType) { TCHAR caption[256]; LoadString(hInst, iError, text, 1023); LoadString(hInst, iError+1, caption, 255); -// sprintf(text, "%s\nError #%d.", text, GetLastError()); return MessageBox(hWndMain, text, caption, uType); } \ No newline at end of file