mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Add replace_file to util.[ch] to survive stupidity of windows rename call
svn:r2208
This commit is contained in:
parent
98b8a89aa8
commit
6453a25567
@ -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,
|
/** Return true iff <b>ip</b> (in host order) is an IP reserved to localhost,
|
||||||
* or reserved for local networks by RFC 1918.
|
* or reserved for local networks by RFC 1918.
|
||||||
*/
|
*/
|
||||||
|
@ -220,6 +220,7 @@ int write_str_to_file(const char *fname, const char *str);
|
|||||||
char *read_file_to_str(const char *filename);
|
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);
|
int parse_line_from_file(char *line, int maxlen, FILE *f, char **key_out, char **value_out);
|
||||||
char *expand_filename(const char *filename);
|
char *expand_filename(const char *filename);
|
||||||
|
int replace_file(const char *from, const char *to);
|
||||||
|
|
||||||
int spawn_func(int (*func)(void *), void *data);
|
int spawn_func(int (*func)(void *), void *data);
|
||||||
void spawn_exit();
|
void spawn_exit();
|
||||||
|
Loading…
Reference in New Issue
Block a user