Skip to content
This repository has been archived by the owner on Nov 17, 2020. It is now read-only.

Commit

Permalink
g_get_user_special_dir(): move load_user_special_dirs() code...
Browse files Browse the repository at this point in the history
... for all supported platforms together, getting rid of a no
longer needed forward declaration at the same time.
  • Loading branch information
dieterv committed Nov 15, 2012
1 parent a142e37 commit 0010227
Showing 1 changed file with 66 additions and 72 deletions.
138 changes: 66 additions & 72 deletions glib/gutils.c
Expand Up @@ -1434,77 +1434,6 @@ g_get_user_runtime_dir (void)
return runtime_dir;
}

#ifdef HAVE_CARBON

static gchar *
find_folder (OSType type)
{
gchar *filename = NULL;
FSRef found;

if (FSFindFolder (kUserDomain, type, kDontCreateFolder, &found) == noErr)
{
CFURLRef url = CFURLCreateFromFSRef (kCFAllocatorSystemDefault, &found);

if (url)
{
CFStringRef path = CFURLCopyFileSystemPath (url, kCFURLPOSIXPathStyle);

if (path)
{
filename = g_strdup (CFStringGetCStringPtr (path, kCFStringEncodingUTF8));

if (! filename)
{
filename = g_new0 (gchar, CFStringGetLength (path) * 3 + 1);

CFStringGetCString (path, filename,
CFStringGetLength (path) * 3 + 1,
kCFStringEncodingUTF8);
}

CFRelease (path);
}

CFRelease (url);
}
}

return filename;
}

static void
load_user_special_dirs (void)
{
g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = find_folder (kDesktopFolderType);
g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = find_folder (kDocumentsFolderType);
g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = find_folder (kDesktopFolderType); /* XXX correct ? */
g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = find_folder (kMusicDocumentsFolderType);
g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = find_folder (kPictureDocumentsFolderType);
g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = NULL;
g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = NULL;
g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = find_folder (kMovieDocumentsFolderType);
}

#endif /* HAVE_CARBON */

#if defined(G_OS_WIN32)
static void
load_user_special_dirs (void)
{
g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = _g_win32_get_known_folder (FOLDERID_Desktop, CSIDL_DESKTOPDIRECTORY);
g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = _g_win32_get_known_folder (FOLDERID_Documents, CSIDL_PERSONAL);
g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = _g_win32_get_known_folder (FOLDERID_Downloads, CSIDL_DESKTOPDIRECTORY);
g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = _g_win32_get_known_folder (FOLDERID_Music, CSIDL_MYMUSIC);
g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = _g_win32_get_known_folder (FOLDERID_Pictures, CSIDL_MYPICTURES);
g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = _g_win32_get_known_folder (FOLDERID_Public, CSIDL_COMMON_DOCUMENTS);
g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = _g_win32_get_known_folder (FOLDERID_Templates, CSIDL_TEMPLATES);
g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = _g_win32_get_known_folder (FOLDERID_Videos, CSIDL_MYVIDEO);
}
#endif /* G_OS_WIN32 */

static void g_init_user_config_dir (void);

#if defined(G_OS_UNIX) && !defined(HAVE_CARBON)

/* adapted from xdg-user-dir-lookup.c
Expand Down Expand Up @@ -1661,8 +1590,73 @@ load_user_special_dirs (void)
g_free (config_file);
}

#endif /* G_OS_UNIX && !HAVE_CARBON */
#elif defined(HAVE_CARBON)

static gchar *
find_folder (OSType type)
{
gchar *filename = NULL;
FSRef found;

if (FSFindFolder (kUserDomain, type, kDontCreateFolder, &found) == noErr)
{
CFURLRef url = CFURLCreateFromFSRef (kCFAllocatorSystemDefault, &found);

if (url)
{
CFStringRef path = CFURLCopyFileSystemPath (url, kCFURLPOSIXPathStyle);

if (path)
{
filename = g_strdup (CFStringGetCStringPtr (path, kCFStringEncodingUTF8));

if (! filename)
{
filename = g_new0 (gchar, CFStringGetLength (path) * 3 + 1);

CFStringGetCString (path, filename,
CFStringGetLength (path) * 3 + 1,
kCFStringEncodingUTF8);
}

CFRelease (path);
}

CFRelease (url);
}
}

return filename;
}

static void
load_user_special_dirs (void)
{
g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = find_folder (kDesktopFolderType);
g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = find_folder (kDocumentsFolderType);
g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = find_folder (kDesktopFolderType); /* XXX correct ? */
g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = find_folder (kMusicDocumentsFolderType);
g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = find_folder (kPictureDocumentsFolderType);
g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = NULL;
g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = NULL;
g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = find_folder (kMovieDocumentsFolderType);
}

#elif defined(G_OS_WIN32)

static void
load_user_special_dirs (void)
{
g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = _g_win32_get_known_folder (FOLDERID_Desktop, CSIDL_DESKTOPDIRECTORY);
g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = _g_win32_get_known_folder (FOLDERID_Documents, CSIDL_PERSONAL);
g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = _g_win32_get_known_folder (FOLDERID_Downloads, CSIDL_DESKTOPDIRECTORY);
g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = _g_win32_get_known_folder (FOLDERID_Music, CSIDL_MYMUSIC);
g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = _g_win32_get_known_folder (FOLDERID_Pictures, CSIDL_MYPICTURES);
g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = _g_win32_get_known_folder (FOLDERID_Public, CSIDL_COMMON_DOCUMENTS);
g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = _g_win32_get_known_folder (FOLDERID_Templates, CSIDL_TEMPLATES);
g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = _g_win32_get_known_folder (FOLDERID_Videos, CSIDL_MYVIDEO);
}
#endif

/**
* g_reload_user_special_dirs_cache:
Expand Down

0 comments on commit 0010227

Please sign in to comment.