mirror of
https://github.com/curl/curl.git
synced 2025-09-07 21:05:09 +03:00
parent
4a686ee6b0
commit
3b4e84c44f
|
@ -396,18 +396,12 @@ static CURLcode unix_filetype(const char c, curlfiletype *t)
|
|||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix(struct Curl_easy *data,
|
||||
struct ftp_parselist_data *parser,
|
||||
static CURLcode parse_unix_totalsize(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
struct curl_fileinfo *finfo = &infop->info;
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
switch(parser->state.UNIX.main) {
|
||||
case PL_UNIX_TOTALSIZE:
|
||||
switch(parser->state.UNIX.sub.total_dirsize) {
|
||||
case PL_UNIX_TOTALSIZE_INIT:
|
||||
if(c == 't') {
|
||||
|
@ -447,18 +441,14 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
}
|
||||
break;
|
||||
}
|
||||
if(parser->state.UNIX.main != PL_UNIX_FILETYPE)
|
||||
break;
|
||||
FALLTHROUGH();
|
||||
case PL_UNIX_FILETYPE:
|
||||
result = unix_filetype(c, &finfo->filetype);
|
||||
if(result)
|
||||
return result;
|
||||
parser->state.UNIX.main = PL_UNIX_PERMISSION;
|
||||
parser->item_length = 0;
|
||||
parser->item_offset = 1;
|
||||
break;
|
||||
case PL_UNIX_PERMISSION:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_permission(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
parser->item_length++;
|
||||
if((parser->item_length <= 9) && !strchr("rwx-tTsS", c))
|
||||
return CURLE_FTP_BAD_FILE_LIST;
|
||||
|
@ -481,8 +471,16 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
parser->state.UNIX.main = PL_UNIX_HLINKS;
|
||||
parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_PRESPACE;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_HLINKS:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_hlinks(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
|
||||
switch(parser->state.UNIX.sub.hlinks) {
|
||||
case PL_UNIX_HLINKS_PRESPACE:
|
||||
if(c != ' ') {
|
||||
|
@ -516,8 +514,15 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_USER:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_user(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
switch(parser->state.UNIX.sub.user) {
|
||||
case PL_UNIX_USER_PRESPACE:
|
||||
if(c != ' ' && len) {
|
||||
|
@ -538,8 +543,15 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_GROUP:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_group(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
switch(parser->state.UNIX.sub.group) {
|
||||
case PL_UNIX_GROUP_PRESPACE:
|
||||
if(c != ' ' && len) {
|
||||
|
@ -560,8 +572,15 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_SIZE:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_size(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
switch(parser->state.UNIX.sub.size) {
|
||||
case PL_UNIX_SIZE_PRESPACE:
|
||||
if(c != ' ') {
|
||||
|
@ -596,8 +615,17 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_TIME:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_time(struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
struct curl_fileinfo *finfo = &infop->info;
|
||||
|
||||
switch(parser->state.UNIX.sub.time) {
|
||||
case PL_UNIX_TIME_PREPART1:
|
||||
if(c != ' ') {
|
||||
|
@ -662,8 +690,18 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
return CURLE_FTP_BAD_FILE_LIST;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_FILENAME:
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_filename(struct Curl_easy *data,
|
||||
struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
switch(parser->state.UNIX.sub.filename) {
|
||||
case PL_UNIX_FILENAME_PRESPACE:
|
||||
if(c != ' ' && len) {
|
||||
|
@ -682,8 +720,6 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
parser->offsets.filename = parser->item_offset;
|
||||
parser->state.UNIX.main = PL_UNIX_FILETYPE;
|
||||
result = ftp_pl_insert_finfo(data, infop);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_FILENAME_WINDOWSEOL:
|
||||
|
@ -692,16 +728,23 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
parser->offsets.filename = parser->item_offset;
|
||||
parser->state.UNIX.main = PL_UNIX_FILETYPE;
|
||||
result = ftp_pl_insert_finfo(data, infop);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
else
|
||||
return CURLE_FTP_BAD_FILE_LIST;
|
||||
|
||||
result = CURLE_FTP_BAD_FILE_LIST;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_SYMLINK:
|
||||
return result;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix_symlink(struct Curl_easy *data,
|
||||
struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
size_t len = curlx_dyn_len(&infop->buf);
|
||||
char *mem = curlx_dyn_ptr(&infop->buf);
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
switch(parser->state.UNIX.sub.symlink) {
|
||||
case PL_UNIX_SYMLINK_PRESPACE:
|
||||
if(c != ' ' && len) {
|
||||
|
@ -774,7 +817,7 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
parser->offsets.symlink_target = parser->item_offset;
|
||||
result = ftp_pl_insert_finfo(data, infop);
|
||||
if(result)
|
||||
return result;
|
||||
break;
|
||||
|
||||
parser->state.UNIX.main = PL_UNIX_FILETYPE;
|
||||
}
|
||||
|
@ -785,18 +828,68 @@ static CURLcode parse_unix(struct Curl_easy *data,
|
|||
parser->offsets.symlink_target = parser->item_offset;
|
||||
result = ftp_pl_insert_finfo(data, infop);
|
||||
if(result)
|
||||
return result;
|
||||
break;
|
||||
|
||||
parser->state.UNIX.main = PL_UNIX_FILETYPE;
|
||||
}
|
||||
else
|
||||
return CURLE_FTP_BAD_FILE_LIST;
|
||||
result = CURLE_FTP_BAD_FILE_LIST;
|
||||
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static CURLcode parse_unix(struct Curl_easy *data,
|
||||
struct ftp_parselist_data *parser,
|
||||
struct fileinfo *infop,
|
||||
const char c)
|
||||
{
|
||||
struct curl_fileinfo *finfo = &infop->info;
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
switch(parser->state.UNIX.main) {
|
||||
case PL_UNIX_TOTALSIZE:
|
||||
result = parse_unix_totalsize(parser, infop, c);
|
||||
if(result)
|
||||
break;
|
||||
if(parser->state.UNIX.main != PL_UNIX_FILETYPE)
|
||||
break;
|
||||
FALLTHROUGH();
|
||||
case PL_UNIX_FILETYPE:
|
||||
result = unix_filetype(c, &finfo->filetype);
|
||||
if(!result) {
|
||||
parser->state.UNIX.main = PL_UNIX_PERMISSION;
|
||||
parser->item_length = 0;
|
||||
parser->item_offset = 1;
|
||||
}
|
||||
break;
|
||||
case PL_UNIX_PERMISSION:
|
||||
result = parse_unix_permission(parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_HLINKS:
|
||||
result = parse_unix_hlinks(parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_USER:
|
||||
result = parse_unix_user(parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_GROUP:
|
||||
result = parse_unix_group(parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_SIZE:
|
||||
result = parse_unix_size(parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_TIME:
|
||||
result = parse_unix_time(parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_FILENAME:
|
||||
result = parse_unix_filename(data, parser, infop, c);
|
||||
break;
|
||||
case PL_UNIX_SYMLINK:
|
||||
result = parse_unix_symlink(data, parser, infop, c);
|
||||
break;
|
||||
}
|
||||
return CURLE_OK;
|
||||
return result;
|
||||
}
|
||||
|
||||
static CURLcode parse_winnt(struct Curl_easy *data,
|
||||
|
|
Loading…
Reference in New Issue
Block a user