Added stock file_copy to file.inc.
Also fixed fopen to return 0 on files that can't be opened. Fixed native fopen to take const filename.
This commit is contained in:
parent
c1552aacd6
commit
51ff0a2c49
@ -293,7 +293,13 @@ static cell AMX_NATIVE_CALL amx_fopen(AMX *amx, cell *params)
|
||||
int len, j=-1;
|
||||
char *file = build_pathname("%s", get_amxstring(amx, params[1], 1, len));
|
||||
char *flags = get_amxstring(amx, params[2], 0, len);
|
||||
|
||||
FILE *fp = fopen(file, flags);
|
||||
if (fp == NULL) {
|
||||
// Failed
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i=0; i<FileList.size(); i++)
|
||||
{
|
||||
if (FileList.at(i) == NULL)
|
||||
|
@ -42,7 +42,7 @@ native file_size(const file[], flag=0);
|
||||
// Code ported from Sanji's File module
|
||||
|
||||
//Open a file
|
||||
native fopen(filename[],mode[]);
|
||||
native fopen(const filename[],const mode[]);
|
||||
//Close a file
|
||||
native fclose(file);
|
||||
//Read a file for ret_size length
|
||||
@ -78,4 +78,38 @@ native fputc(file,num); //write char (size 1)
|
||||
native fputs(file,num); //write short (size 2)
|
||||
native fputl(file,num); //write long (size 4)
|
||||
native fputi(file,num); //write int (size 4)
|
||||
native fputf(file,Float:num); //write float (size 4)
|
||||
native fputf(file,Float:num); //write float (size 4)
|
||||
|
||||
stock bool:file_copy(const SOURCE[], const TARGET[], error[], const ERRORLEN, const bool:REPLACE_TARGET = false) {
|
||||
if (!file_exists(SOURCE)) {
|
||||
format(error, ERRORLEN, "File copy error: Source ^"%s^" doesn't exist!", SOURCE)
|
||||
return false
|
||||
}
|
||||
if (!REPLACE_TARGET && file_exists(TARGET)) {
|
||||
format(error, ERRORLEN, "File copy error: Target ^"%s^" exists!", TARGET)
|
||||
return false
|
||||
}
|
||||
|
||||
new source = fopen(SOURCE, "rb")
|
||||
if (!source) {
|
||||
format(error, ERRORLEN, "File copy error: Opening source ^"%s^" failed!", SOURCE)
|
||||
return false
|
||||
}
|
||||
|
||||
new target = fopen(TARGET, "wb")
|
||||
if (!target) {
|
||||
format(error, ERRORLEN, "File copy error: Opening target ^"%s^" failed!", TARGET)
|
||||
fclose(source)
|
||||
return false
|
||||
}
|
||||
|
||||
for (new buffer, eof = feof(source); !eof; !eof && fputc(target, buffer)) {
|
||||
buffer = fgetc(source)
|
||||
eof = feof(source)
|
||||
}
|
||||
|
||||
fclose(source)
|
||||
fclose(target)
|
||||
|
||||
return true
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user