Add replace_file to util.[ch] to survive stupidity of windows rename call

svn:r2208
This commit is contained in:
Nick Mathewson
2004-08-09 04:28:25 +00:00
parent 540d0fc712
commit e0be9d092c
2 changed files with 28 additions and 0 deletions
+27
View File
@@ -1559,6 +1559,33 @@ char *expand_filename(const char *filename)
}
}
/**
* Rename the file 'from' to the file 'to'. On unix, this is the same as
* rename(2). On windows, this removes 'to' first if it already exists.
* Returns 0 on success. Returns -1 and sets errno on failure.
*/
int replace_file(const char *from, const char *to)
{
#ifndef MS_WINDOWS
return rename(from,to);
#else
switch(file_status(to))
{
case FN_NOENT:
break;
case FN_FILE:
if (unlink(to)) return -1;
break;
case FN_ERROR:
return -1;
case FN_DIR:
errno = EISDIR;
return -1;
}
return rename(from,to);
#endif
}
/** Return true iff <b>ip</b> (in host order) is an IP reserved to localhost,
* or reserved for local networks by RFC 1918.
*/
+1
View File
@@ -220,6 +220,7 @@ int write_str_to_file(const char *fname, const char *str);
char *read_file_to_str(const char *filename);
int parse_line_from_file(char *line, int maxlen, FILE *f, char **key_out, char **value_out);
char *expand_filename(const char *filename);
int replace_file(const char *from, const char *to);
int spawn_func(int (*func)(void *), void *data);
void spawn_exit();