blob: b2a1e0671ede78bcca28842e6fa2e3bbb9539fd0 [file] [log] [blame] [raw]
#include <string.h>
#include <unistd.h>
#include <windows.h>
#ifndef FILE_ATTRIBUTE_INROM
#define FILE_ATTRIBUTE_INROM FILE_ATTRIBUTE_DEVICE
#endif
#ifndef FILE_ATTRIBUTE_ROMMODULE
#define FILE_ATTRIBUTE_ROMMODULE FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
#endif
int rename(const char *oldfile, const char *newfile) {
size_t oldfile_len = strlen(oldfile) + 1;
size_t newfile_len = strlen(newfile) + 1;
wchar_t woldfile[oldfile_len];
wchar_t wnewfile[newfile_len];
mbstowcs(woldfile, oldfile, oldfile_len);
mbstowcs(wnewfile, newfile, newfile_len);
unsigned long int attrib = GetFileAttributes(wnewfile);
if(attrib != (unsigned long int)-1 && attrib != FILE_ATTRIBUTE_DIRECTORY &&
attrib != FILE_ATTRIBUTE_INROM && attrib != FILE_ATTRIBUTE_ROMMODULE && unlink(newfile) < 0) return -1;
if(!MoveFileW(woldfile, wnewfile)) return -1;
return 0;
}