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
d4db8397
Commit
d4db8397
authored
Aug 26, 2009
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
XDG user dirs support (unused)
parent
a79a9341
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
121 additions
and
0 deletions
+121
-0
src/config/dirs.c
src/config/dirs.c
+121
-0
No files found.
src/config/dirs.c
View file @
d4db8397
...
...
@@ -244,6 +244,111 @@ static char *config_GetAppDir (const char *xdg_name, const char *xdg_default)
return
psz_dir
;
}
static
char
*
config_GetTypeDir
(
const
char
*
xdg_name
)
{
#if defined(WIN32) || defined(__APPLE__) || defined(SYS_BEOS)
(
void
)
xdg_name
;
return
config_GetAppDir
(
NULL
,
NULL
);
#else
const
size_t
namelen
=
strlen
(
xdg_name
);
const
char
*
home
=
getenv
(
"HOME"
);
const
size_t
homelen
=
strlen
(
home
);
const
char
*
dir
=
getenv
(
"XDG_CONFIG_HOME"
);
const
char
*
file
=
"user-dirs.dirs"
;
if
(
home
==
NULL
)
return
NULL
;
if
(
dir
==
NULL
)
{
dir
=
home
;
file
=
".config/user-dirs.dirs"
;
}
char
*
path
;
if
(
asprintf
(
&
path
,
"%s/%s"
,
dir
,
file
)
==
-
1
)
return
NULL
;
FILE
*
stream
=
fopen
(
path
,
"rt"
);
free
(
path
);
if
(
stream
==
NULL
)
return
NULL
;
char
*
linebuf
=
NULL
;
size_t
linelen
=
0
;
while
(
getline
(
&
linebuf
,
&
linelen
,
stream
)
!=
-
1
)
{
char
*
ptr
=
linebuf
;
ptr
+=
strspn
(
ptr
,
"
\t
"
);
/* Skip whites */
if
(
strncmp
(
ptr
,
"XDG_"
,
4
))
continue
;
ptr
+=
4
;
/* Skip XDG_ */
if
(
strncmp
(
ptr
,
xdg_name
,
namelen
))
continue
;
ptr
+=
namelen
;
/* Skip XDG type name */
if
(
strncmp
(
ptr
,
"_DIR"
,
4
))
continue
;
ptr
+=
4
;
/* Skip _DIR */
ptr
+=
strspn
(
ptr
,
"
\t
"
);
/* Skip whites */
if
(
*
ptr
!=
'='
)
continue
;
ptr
++
;
/* Skip equality sign */
ptr
+=
strspn
(
ptr
,
"
\t
"
);
/* Skip whites */
if
(
*
ptr
!=
'"'
)
continue
;
ptr
++
;
/* Skip quote */
linelen
-=
ptr
-
linebuf
;
char
*
out
;
if
(
strncmp
(
ptr
,
"$HOME"
,
5
))
{
path
=
malloc
(
linelen
);
if
(
path
==
NULL
)
continue
;
out
=
path
;
}
else
{
/* Prefix with $HOME */
ptr
+=
5
;
path
=
malloc
(
homelen
+
linelen
-
5
);
if
(
path
==
NULL
)
continue
;
memcpy
(
path
,
home
,
homelen
);
out
=
path
+
homelen
;
}
while
(
*
ptr
!=
'"'
)
{
if
(
*
ptr
==
'\\'
)
ptr
++
;
if
(
*
ptr
==
'\0'
)
goto
skip
;
*
(
out
++
)
=
*
(
ptr
++
);
}
*
out
=
'\0'
;
goto
done
;
skip:
free
(
path
);
}
/* Default! */
if
(
strcmp
(
xdg_name
,
"DESKTOP"
)
==
0
)
{
if
(
asprintf
(
&
path
,
"%s/Desktop"
,
home
)
==
-
1
)
path
=
NULL
;
}
else
path
=
strdup
(
home
);
done:
free
(
linebuf
);
char
*
ret
=
FromLocaleDup
(
path
);
free
(
path
);
return
ret
;
#endif
}
/**
* Get the user's VLC cache directory
* (used for stuff like the modules cache, the album art cache, ...)
...
...
@@ -273,6 +378,22 @@ char *config_GetUserDir (vlc_userdir_t type)
return
config_GetAppDir
(
"CONFIG"
,
".config"
);
case
VLC_DATA_DIR
:
return
config_GetAppDir
(
"DATA"
,
".local/share"
);
case
VLC_DESKTOP_DIR
:
return
config_GetTypeDir
(
"DESKTOP"
);
case
VLC_DOWNLOAD_DIR
:
return
config_GetTypeDir
(
"DOWNLOAD"
);
case
VLC_TEMPLATES_DIR
:
return
config_GetTypeDir
(
"TEMPLATES"
);
case
VLC_PUBLICSHARE_DIR
:
return
config_GetTypeDir
(
"PUBLICSHARE"
);
case
VLC_DOCUMENTS_DIR
:
return
config_GetTypeDir
(
"DOCUMENTS"
);
case
VLC_MUSIC_DIR
:
return
config_GetTypeDir
(
"MUSIC"
);
case
VLC_PICTURES_DIR
:
return
config_GetTypeDir
(
"PICTURES"
);
case
VLC_VIDEOS_DIR
:
return
config_GetTypeDir
(
"VIDEOS"
);
}
assert
(
0
);
}
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