Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
ebd0b550
Commit
ebd0b550
authored
Nov 20, 2005
by
Christophe Mutricy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
backport of [13300]
parent
d2d7e355
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
176 additions
and
17 deletions
+176
-17
modules/control/http/util.c
modules/control/http/util.c
+176
-17
No files found.
modules/control/http/util.c
View file @
ebd0b550
...
@@ -818,51 +818,210 @@ char *E_(FirstWord)( char *psz, char *new )
...
@@ -818,51 +818,210 @@ char *E_(FirstWord)( char *psz, char *new )
else
else
return
NULL
;
return
NULL
;
}
}
/**********************************************************************
* Find_end_MRL: Find the end of the sentence :
* this function parses the string psz and find the end of the item
* and/or option with detecting the " and ' problems.
* returns NULL if an error is detected, otherwise, returns a pointer
* of the end of the sentence (after the last character)
**********************************************************************/
static
char
*
Find_end_MRL
(
char
*
psz
)
{
char
*
s_sent
=
psz
;
switch
(
*
s_sent
)
{
case
'\"'
:
{
s_sent
++
;
while
(
(
*
s_sent
!=
'\"'
)
&&
(
*
s_sent
!=
'\0'
)
)
{
if
(
*
s_sent
==
'\''
)
{
s_sent
=
Find_end_MRL
(
s_sent
);
if
(
s_sent
==
NULL
)
{
return
NULL
;
}
}
else
{
s_sent
++
;
}
}
if
(
*
s_sent
==
'\"'
)
{
s_sent
++
;
return
s_sent
;
}
else
/* *s_sent == '\0' , which means the number of " is incorrect */
{
return
NULL
;
}
break
;
}
case
'\''
:
{
s_sent
++
;
while
(
(
*
s_sent
!=
'\''
)
&&
(
*
s_sent
!=
'\0'
)
)
{
if
(
*
s_sent
==
'\"'
)
{
s_sent
=
Find_end_MRL
(
s_sent
);
if
(
s_sent
==
NULL
)
{
return
NULL
;
}
}
else
{
s_sent
++
;
}
}
if
(
*
s_sent
==
'\''
)
{
s_sent
++
;
return
s_sent
;
}
else
/* *s_sent == '\0' , which means the number of ' is incorrect */
{
return
NULL
;
}
break
;
}
default:
/* now we can look for spaces */
{
while
(
(
*
s_sent
!=
' '
)
&&
(
*
s_sent
!=
'\0'
)
)
{
if
(
(
*
s_sent
==
'\''
)
||
(
*
s_sent
==
'\"'
)
)
{
s_sent
=
Find_end_MRL
(
s_sent
);
}
else
{
s_sent
++
;
}
}
return
s_sent
;
}
}
}
/**********************************************************************
/**********************************************************************
* parse_MRL: parse the MRL, find the mrl string and the options,
* parse_MRL: parse the MRL, find the mrl string and the options,
* create an item with all information in it, and return the item.
* create an item with all information in it, and return the item.
* return NULL if there is an error.
* return NULL if there is an error.
**********************************************************************/
**********************************************************************/
playlist_item_t
*
E_
(
MRLParse
)(
intf_thread_t
*
p_intf
,
char
*
_
psz
,
playlist_item_t
*
E_
(
MRLParse
)(
intf_thread_t
*
p_intf
,
char
*
psz
,
char
*
psz_name
)
char
*
psz_name
)
{
{
char
*
psz
=
strdup
(
_psz
);
char
**
ppsz_options
=
NULL
;
char
*
mrl
;
char
*
s_mrl
=
psz
;
char
*
s_mrl
=
psz
;
int
i_error
=
0
;
char
*
s_temp
;
char
*
s_temp
;
int
i
=
0
;
int
i_options
=
0
;
playlist_item_t
*
p_item
=
NULL
;
playlist_item_t
*
p_item
=
NULL
;
/* In case there is spaces before the mrl */
while
(
(
*
s_mrl
==
' '
)
&&
(
*
s_mrl
!=
'\0'
)
)
{
s_mrl
++
;
}
/* extract the mrl */
/* extract the mrl */
s_temp
=
E_
(
FirstWord
)(
s_mrl
,
s_mrl
);
s_temp
=
strstr
(
s_mrl
,
" :"
);
if
(
s_temp
==
NULL
)
if
(
s_temp
==
NULL
)
{
{
s_temp
=
s_mrl
+
strlen
(
s_mrl
);
s_temp
=
s_mrl
+
strlen
(
s_mrl
);
}
else
{
while
(
(
*
s_temp
==
' '
)
&&
(
s_temp
!=
s_mrl
)
)
{
s_temp
--
;
}
s_temp
++
;
}
/* if the mrl is between " or ', we must remove them */
if
(
(
*
s_mrl
==
'\''
)
||
(
*
s_mrl
==
'\"'
)
)
{
mrl
=
(
char
*
)
malloc
(
(
s_temp
-
s_mrl
-
1
)
*
sizeof
(
char
)
);
strncpy
(
mrl
,
(
s_mrl
+
1
)
,
s_temp
-
s_mrl
-
2
);
mrl
[
s_temp
-
s_mrl
-
2
]
=
'\0'
;
}
else
{
mrl
=
(
char
*
)
malloc
(
(
s_temp
-
s_mrl
+
1
)
*
sizeof
(
char
)
);
strncpy
(
mrl
,
s_mrl
,
s_temp
-
s_mrl
);
mrl
[
s_temp
-
s_mrl
]
=
'\0'
;
}
}
p_item
=
playlist_ItemNew
(
p_intf
,
s_mrl
,
psz_name
);
s_mrl
=
s_temp
;
s_mrl
=
s_temp
;
/* now we can take care of the options */
/* now we can take care of the options */
while
(
*
s_mrl
!=
'\0'
)
while
(
(
*
s_mrl
!=
'\0'
)
&&
(
i_error
==
0
)
)
{
switch
(
*
s_mrl
)
{
{
s_temp
=
E_
(
FirstWord
)(
s_mrl
,
s_mrl
);
case
' '
:
if
(
s_mrl
==
'\0'
)
{
s_mrl
++
;
break
;
break
;
}
case
':'
:
/* an option */
{
s_temp
=
Find_end_MRL
(
s_mrl
);
if
(
s_temp
==
NULL
)
if
(
s_temp
==
NULL
)
{
{
s_temp
=
s_mrl
+
strlen
(
s_mrl
)
;
i_error
=
1
;
}
}
if
(
*
s_mrl
!=
':'
)
msg_Warn
(
p_intf
,
"invalid MRL option: %s"
,
s_mrl
);
else
else
playlist_ItemAddOption
(
p_item
,
s_mrl
);
{
i_options
++
;
ppsz_options
=
realloc
(
ppsz_options
,
i_options
*
sizeof
(
char
*
)
);
ppsz_options
[
i_options
-
1
]
=
malloc
(
(
s_temp
-
s_mrl
+
1
)
*
sizeof
(
char
)
);
strncpy
(
ppsz_options
[
i_options
-
1
]
,
s_mrl
,
s_temp
-
s_mrl
);
/* don't forget to finish the string with a '\0' */
(
ppsz_options
[
i_options
-
1
])[
s_temp
-
s_mrl
]
=
'\0'
;
s_mrl
=
s_temp
;
s_mrl
=
s_temp
;
}
}
break
;
}
default:
{
i_error
=
1
;
break
;
}
}
}
if
(
i_error
!=
0
)
{
free
(
mrl
);
}
else
{
/* now create an item */
p_item
=
playlist_ItemNew
(
p_intf
,
mrl
,
psz_name
);
for
(
i
=
0
;
i
<
i_options
;
i
++
)
{
playlist_ItemAddOption
(
p_item
,
ppsz_options
[
i
]
);
}
}
for
(
i
=
0
;
i
<
i_options
;
i
++
)
free
(
ppsz_options
[
i
]
);
if
(
i_options
)
free
(
ppsz_options
);
free
(
psz
);
return
p_item
;
return
p_item
;
}
}
/**********************************************************************
/**********************************************************************
* RealPath: parse ../, ~ and path stuff
* RealPath: parse ../, ~ and path stuff
**********************************************************************/
**********************************************************************/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment