Merge pull request #37 from Andrew-Dunn/path-request-style

Added support for path API request style.
This commit is contained in:
Takeshi Nakatani 2014-06-03 23:37:00 +09:00
commit 29a37645dd
4 changed files with 28 additions and 8 deletions

View File

@ -69,6 +69,7 @@ extern bool debug;
extern bool foreground;
extern bool foreground2;
extern bool nomultipart;
extern bool pathrequeststyle;
extern std::string program_name;
extern std::string service_path;
extern std::string host;

View File

@ -83,6 +83,7 @@ bool debug = false;
bool foreground = false;
bool foreground2 = false;
bool nomultipart = false;
bool pathrequeststyle = false;
std::string program_name;
std::string service_path = "/";
std::string host = "http://s3.amazonaws.com";
@ -3674,6 +3675,10 @@ static int my_fuse_opt_proc(void* data, const char* arg, int key, struct fuse_ar
}
return 0;
}
if(0 == strcmp(arg, "use_path_request_style")){
pathrequeststyle = true;
return 0;
}
// debug option
//

View File

@ -312,7 +312,7 @@ MVNODE *create_mvnode(const char *old_path, const char *new_path, bool is_dir, b
return NULL;
}
if(NULL == (p_new_path = strdup(new_path))){
if(NULL == (p_new_path = strdup(new_path))){
free(p);
free(p_old_path);
printf("create_mvnode: could not allocation memory for p_new_path\n");
@ -330,7 +330,7 @@ MVNODE *create_mvnode(const char *old_path, const char *new_path, bool is_dir, b
}
//
// Add sorted MVNODE data(Ascending order)
// Add sorted MVNODE data(Ascending order)
//
MVNODE *add_mvnode(MVNODE** head, MVNODE** tail, const char *old_path, const char *new_path, bool is_dir, bool normdir)
{
@ -671,9 +671,9 @@ mode_t get_mode(headers_t& meta, const char* path, bool checkdir, bool forcedir)
}
}
// Checking the bitmask, if the last 3 bits are all zero then process as a regular
// file type (S_IFDIR or S_IFREG), otherwise return mode unmodified so that S_IFIFO,
// file type (S_IFDIR or S_IFREG), otherwise return mode unmodified so that S_IFIFO,
// S_IFSOCK, S_IFCHR, S_IFLNK and S_IFBLK devices can be processed properly by fuse.
if(!(mode & S_IFMT)){
if(!(mode & S_IFMT)){
if(!isS3sync){
if(checkdir){
if(forcedir){
@ -823,7 +823,7 @@ void show_usage (void)
void show_help (void)
{
show_usage();
printf(
printf(
"\n"
"Mount an Amazon S3 bucket as a file system.\n"
"\n"
@ -967,6 +967,11 @@ void show_help (void)
" only rename command(ex. mv). If this option is specified with\n"
" nocopapi, the s3fs ignores it.\n"
"\n"
" use_path_request_style (use legacy API calling style)\n"
" Enble compatibility with S3-like APIs which do not support\n"
" the virtual-host request style, by using the older path request\n"
" style.\n"
"\n"
"FUSE/mount Options:\n"
"\n"
" Most of the generic mount options described in 'man mount' are\n"

View File

@ -186,8 +186,18 @@ string prepare_url(const char* url)
uri_length = 8;
}
uri = url_str.substr(0, uri_length);
host = bucket + "." + url_str.substr(uri_length, bucket_pos - uri_length).c_str();
path = url_str.substr((bucket_pos + bucket_length));
if(!pathrequeststyle){
host = bucket + "." + url_str.substr(uri_length, bucket_pos - uri_length).c_str();
path = url_str.substr((bucket_pos + bucket_length));
}else{
host = url_str.substr(uri_length, bucket_pos - uri_length).c_str();
string part = url_str.substr((bucket_pos + bucket_length));
if('/' != part[0]){
part = "/" + part;
}
path = "/" + bucket + part;
}
url_str = uri + host + path;
@ -207,4 +217,3 @@ string get_date()
strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&t));
return buf;
}