mirror of
https://github.com/curl/curl.git
synced 2025-09-17 09:32:48 +03:00
file: add handling of native AmigaOS paths
On AmigaOS 4.x, handle native absolute paths, whilst blocking relative paths. Also allow unix style paths if feature enabled at link time. Inspiration-from: Michael Trebilcock Closes #9259
This commit is contained in:
parent
ba2ccf368e
commit
23c708cdc8
27
lib/file.c
27
lib/file.c
|
@ -71,6 +71,8 @@
|
||||||
|
|
||||||
#if defined(WIN32) || defined(MSDOS) || defined(__EMX__)
|
#if defined(WIN32) || defined(MSDOS) || defined(__EMX__)
|
||||||
#define DOS_FILESYSTEM 1
|
#define DOS_FILESYSTEM 1
|
||||||
|
#elif defined(__amigaos4__)
|
||||||
|
#define AMIGA_FILESYSTEM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OPEN_NEEDS_ARG3
|
#ifdef OPEN_NEEDS_ARG3
|
||||||
|
@ -196,9 +198,34 @@ static CURLcode file_connect(struct Curl_easy *data, bool *done)
|
||||||
return CURLE_URL_MALFORMAT;
|
return CURLE_URL_MALFORMAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef AMIGA_FILESYSTEM
|
||||||
|
/*
|
||||||
|
* A leading slash in an AmigaDOS path denotes the parent
|
||||||
|
* directory, and hence we block this as it is relative.
|
||||||
|
* Absolute paths start with 'volumename:', so we check for
|
||||||
|
* this first. Failing that, we treat the path as a real unix
|
||||||
|
* path, but only if the application was compiled with -lunix.
|
||||||
|
*/
|
||||||
|
fd = -1;
|
||||||
|
file->path = real_path;
|
||||||
|
|
||||||
|
if(real_path[0] == '/') {
|
||||||
|
extern int __unix_path_semantics;
|
||||||
|
if(strchr(real_path + 1, ':')) {
|
||||||
|
/* Amiga absolute path */
|
||||||
|
fd = open_readonly(real_path + 1, O_RDONLY);
|
||||||
|
file->path++;
|
||||||
|
}
|
||||||
|
else if(__unix_path_semantics) {
|
||||||
|
/* -lunix fallback */
|
||||||
|
fd = open_readonly(real_path, O_RDONLY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
fd = open_readonly(real_path, O_RDONLY);
|
fd = open_readonly(real_path, O_RDONLY);
|
||||||
file->path = real_path;
|
file->path = real_path;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
file->freepath = real_path; /* free this when done */
|
file->freepath = real_path; /* free this when done */
|
||||||
|
|
||||||
file->fd = fd;
|
file->fd = fd;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user