亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? vfs-volume.c

?? 臺(tái)灣人開(kāi)發(fā)的Linux下的文件管理器
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/**  C Implementation: vfs-volume** Description: *** Author: Hong Jen Yee (PCMan) <pcman.tw (AT) gmail.com>, (C) 2006** Copyright: See COPYING file that comes with this distribution**/#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "vfs-volume.h"#include "glib-mem.h"#include <glib/gi18n.h>#ifdef HAVE_HAL#include <dbus/dbus.h>#include <dbus/dbus-glib.h>#include <dbus/dbus-glib-lowlevel.h>#include <libhal.h> /* #include <libhal-storage.h> */struct _VFSVolume{    char* udi;    char* storage_udi;    char* disp_name;    char* icon;    char* mount_point;    gboolean is_mounted;    gboolean is_hotpluggable;    gboolean is_removable;    gboolean requires_eject;};typedef struct _VFSVolumeCallbackData{    VFSVolumeCallback cb;    gpointer user_data;}VFSVolumeCallbackData;static LibHalContext* hal_context = NULL;static DBusConnection * dbus_connection = NULL;/* FIXME: Will it be better if we use GSList? */static GArray* volumes = NULL;static GArray* callbacks = NULL;static call_callbacks( VFSVolume* vol, VFSVolumeState state ){    int i;    VFSVolumeCallbackData* e;    if ( !callbacks )        return ;    e = ( VFSVolumeCallbackData* ) callbacks->data;    for ( i = 0; i < callbacks->len; ++i )    {        ( *e[ i ].cb ) ( vol, state, e[ i ].user_data );    }}static void vfs_volume_set_from_udi( VFSVolume* volume, const char* udi ){    g_free( volume->udi );    volume->udi = g_strdup( udi );    g_free( volume->mount_point );    volume->mount_point = libhal_device_get_property_string ( hal_context,                                                              udi,                                                              "volume.mount_point",                                                              NULL );    if ( volume->mount_point && !*volume->mount_point )    {        libhal_free_string( volume->mount_point );        volume->mount_point = NULL;    }    g_free( volume->storage_udi );    volume->storage_udi = libhal_device_get_property_string ( hal_context,                                                              udi,                                                              "block.storage_device",                                                              NULL );    if ( G_UNLIKELY( ! volume->mount_point ) )        volume->is_mounted = FALSE;    else        volume->is_mounted = libhal_device_get_property_bool ( hal_context,                                                               udi,                                                               "volume.is_mounted",                                                               NULL );    volume->is_hotpluggable = libhal_device_get_property_bool ( hal_context,                                                                volume->storage_udi,                                                                "storage.hotpluggable",                                                                NULL );    volume->requires_eject = libhal_device_get_property_bool ( hal_context,                                                               volume->storage_udi,                                                               "storage.requires_eject",                                                               NULL );    volume->is_removable = libhal_device_get_property_bool ( hal_context,                                                             volume->storage_udi,                                                             "storage.removable",                                                             NULL );}static VFSVolume* vfs_volume_new( const char* udi ){    VFSVolume * volume;    const char* storage_udi;    volume = g_slice_new0( VFSVolume );    vfs_volume_set_from_udi( volume, udi );    return volume;}void vfs_volume_free( VFSVolume* volume ){    g_free( volume->udi );    if ( volume->mount_point )        libhal_free_string( volume->mount_point );    if ( volume->storage_udi )        libhal_free_string( volume->storage_udi );    g_free( volume->disp_name );    g_slice_free( VFSVolume, volume );}static void vfs_volume_update_disp_name( VFSVolume* vol ){    char * disp_name = NULL;    char* label;    g_free( vol->disp_name );    if( G_UNLIKELY(vol->mount_point &&         0 == strcmp("/", vol->mount_point)) )    {        vol->disp_name = g_strdup(_("File System"));        return;    }    label = libhal_device_get_property_string ( hal_context, vol->udi, "volume.label", NULL );    if ( G_LIKELY( label ) )    {        if ( *label )            disp_name = g_strdup( label );        libhal_free_string( label );    }    /* FIXME: Display better names for cdroms and other removable media */    if ( ! disp_name )    {        char * device;        device = libhal_device_get_property_string ( hal_context, vol->udi, "block.device", NULL );        if ( G_LIKELY( device ) )        {            if ( *device )                disp_name = g_path_get_basename( device );            libhal_free_string( device );        }    }    vol->disp_name = disp_name;}static void on_hal_device_added( LibHalContext *ctx, const char *udi ){    VFSVolume * volume;    char* fs;    if ( libhal_device_get_property_bool ( ctx, udi, "volume.ignore", NULL ) )        return ;    if ( ! libhal_device_property_exists ( ctx, udi, "volume.fsusage", NULL ) )        return ;    /* g_debug("device added: %s", udi); */    fs = libhal_device_get_property_string ( ctx, udi, "volume.fsusage", NULL );    if ( !fs || ( ( strcmp ( fs, "filesystem" ) != 0 ) && ( strcmp ( fs, "crypto" ) != 0 ) ) )    {        libhal_free_string ( fs );        return ;    }g_debug("device added: %s", udi);    volume = vfs_volume_new( udi );    /* FIXME: sort items */    volumes = g_array_append_val( volumes, volume );    call_callbacks( volume, VFS_VOLUME_ADDED );}static void on_hal_device_removed( LibHalContext *ctx, const char *udi ){    int i;    VFSVolume **v, *volume;    if ( !volumes )        return ;    /* g_debug("device removed: %s", udi); */    v = ( VFSVolume** ) volumes->data;    for ( i = 0; i < volumes->len; ++i )    {        if ( 0 == strcmp( v[ i ] ->udi, udi ) )        {            volume = v[ i ];            volumes = g_array_remove_index( volumes, i );            call_callbacks( volume, VFS_VOLUME_REMOVED );            vfs_volume_free( volume );            break;        }    }}static void on_hal_property_modified( LibHalContext *ctx,                                      const char *udi,                                      const char *key,                                      dbus_bool_t is_removed,                                      dbus_bool_t is_added ){    /* FIXME: on_hal_property_modified: this func is not efficient, nor correct */    int i;    VFSVolume** v;    if ( !volumes )        return ;    v = ( VFSVolume** ) volumes->data;    for ( i = 0; i < volumes->len; ++i )    {        if ( 0 == strcmp( v[ i ] ->udi , udi ) )        {            vfs_volume_set_from_udi( v[ i ], udi );            vfs_volume_update_disp_name( v[ i ] );            call_callbacks( v[ i ], VFS_VOLUME_CHANGED );            break;        }    }}static void on_hal_condition ( LibHalContext *ctx,                               const char *udi,                               const char *condition_name,                               const char *condition_detail ){    /* FIXME: on_hal_condition: this func is not efficient, nor correct */    /* g_debug( "condition changed: %s, %s, %s\n", condition_name, condition_detail, udi ); */    int i;    VFSVolume** v;    if ( !volumes )        return ;    v = ( VFSVolume** ) volumes->data;    for ( i = 0; i < volumes->len; ++i )    {        if ( 0 == strcmp( v[ i ] ->udi , udi ) )        {            vfs_volume_set_from_udi( v[ i ], udi );            call_callbacks( v[ i ], VFS_VOLUME_CHANGED );            break;        }    }}/* This function is taken from gnome volumen manager */static dbus_bool_thal_mainloop_integration ( LibHalContext *ctx, DBusError *error ){    dbus_connection = dbus_bus_get ( DBUS_BUS_SYSTEM, error );    if ( dbus_error_is_set ( error ) )        return FALSE;    dbus_connection_setup_with_g_main ( dbus_connection, NULL );    libhal_ctx_set_dbus_connection ( ctx, dbus_connection );    return TRUE;}gboolean vfs_volume_init(){    DBusError error;    char** devices;    char** device;    int n;    if ( hal_context )        return TRUE;    hal_context = libhal_ctx_new ();    if ( hal_context )    {        dbus_error_init ( &error );        if ( hal_mainloop_integration ( hal_context, &error ) )        {            libhal_ctx_set_device_added ( hal_context, on_hal_device_added );            libhal_ctx_set_device_removed ( hal_context, on_hal_device_removed );            libhal_ctx_set_device_property_modified ( hal_context, on_hal_property_modified );            /*                libhal_ctx_set_device_new_capability (ctx, on_hal_device_new_capability);                libhal_ctx_set_device_lost_capability (ctx, on_hal_device_lost_capability);            */            libhal_ctx_set_device_condition( hal_context, on_hal_condition );            if ( libhal_ctx_init ( hal_context, &error ) )            {                devices = libhal_find_device_by_capability ( hal_context, "volume", &n, &error );                if ( devices )                {                    volumes = g_array_sized_new( FALSE, FALSE, sizeof( VFSVolume* ), n + 4 );                    for ( device = devices; *device; ++device )                    {                        on_hal_device_added( hal_context, *device );                    }                    libhal_free_string_array ( devices );                }                else                    volumes = g_array_sized_new( FALSE, FALSE, sizeof( VFSVolume* ), 4 );                if ( libhal_device_property_watch_all ( hal_context, &error ) )                {                    dbus_error_free ( &error );                    return TRUE;                }                else                {                    g_warning ( "%s\n", error.message );                }            }            else            {                g_warning ( "%s\n", error.message );            }        }        libhal_ctx_free ( hal_context );        hal_context = NULL;        dbus_error_free ( &error );    }    else    {        g_warning ( "%s\n", error.message );    }    return FALSE;}gboolean vfs_volume_clean(){    int i;    VFSVolume** vols;    if ( callbacks )        g_array_free( callbacks, TRUE );    if ( volumes )    {        vols = ( VFSVolume** ) volumes->data;        for ( i = 0; i < volumes->len; ++i )

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲制服色| 日韩视频一区二区在线观看| 国产高清精品在线| 韩国成人在线视频| 国产福利一区二区三区视频在线 | 丝袜亚洲精品中文字幕一区| 亚洲综合一区二区三区| 亚洲夂夂婷婷色拍ww47| 亚洲一区二区美女| 免费美女久久99| 国产在线精品一区二区不卡了 | 国产精品国产自产拍在线| 国产精品家庭影院| 亚洲成在人线在线播放| 久久9热精品视频| 成人一区二区三区中文字幕| 91香蕉视频污在线| 91精品婷婷国产综合久久竹菊| 91精品国产综合久久久久| 精品理论电影在线| 中文字幕制服丝袜一区二区三区 | 天涯成人国产亚洲精品一区av| 亚洲动漫第一页| 欧美aaaaaa午夜精品| 成人高清视频在线观看| 欧美日韩精品系列| 久久这里只有精品6| 亚洲美女电影在线| 免费成人性网站| 成人av网址在线观看| 欧美日韩视频专区在线播放| 久久综合九色欧美综合狠狠| 亚洲人123区| 久久99国产精品久久99| 91小视频在线| 久久久久国产精品人| 一区二区三区四区乱视频| 精品一区二区三区不卡| 在线视频国产一区| 久久亚区不卡日本| 日本在线不卡视频| 99国产精品国产精品毛片| 欧美成人性战久久| 亚洲图片欧美视频| 成人精品国产福利| 精品国产一区二区三区不卡| 亚洲综合视频网| 成人av在线一区二区三区| 欧美一区二区私人影院日本| 国产精品免费网站在线观看| 免费观看日韩av| 欧美主播一区二区三区美女| 国产欧美一区二区三区沐欲| 日韩制服丝袜先锋影音| 色综合久久中文字幕综合网| 国产片一区二区三区| 久久69国产一区二区蜜臀| 欧美日韩激情在线| 亚洲午夜激情av| 色一区在线观看| 国产精品久久毛片| 成人免费看的视频| 国产欧美精品日韩区二区麻豆天美| 日韩精品欧美精品| 欧美日韩国产免费一区二区| 亚洲另类春色校园小说| 99久久久免费精品国产一区二区 | 91视频在线观看| 国产精品久久777777| 成人高清视频在线| 亚洲欧洲成人自拍| www.av亚洲| 亚洲欧洲制服丝袜| 91蝌蚪porny成人天涯| 亚洲欧美一区二区三区孕妇| av综合在线播放| 亚洲欧洲无码一区二区三区| 91片在线免费观看| 亚洲与欧洲av电影| 欧美系列一区二区| 婷婷综合在线观看| 91精品国产综合久久婷婷香蕉| 日本欧美一区二区在线观看| 91精品国产日韩91久久久久久| 日韩一区精品视频| 精品久久久久久久久久久院品网 | 97久久精品人人做人人爽50路 | 性做久久久久久久久| 欧美片网站yy| 极品少妇一区二区| 国产精品久久久久久久久动漫| 91视频一区二区| 日本中文字幕一区二区有限公司| 欧美大片一区二区| 成人国产一区二区三区精品| 亚洲最色的网站| 精品免费一区二区三区| 不卡一卡二卡三乱码免费网站| 樱桃国产成人精品视频| 欧美一区二区三区免费| 成人爽a毛片一区二区免费| 亚洲一二三四区不卡| 日韩精品一区二区三区在线观看| 色综合久久99| 久久国产夜色精品鲁鲁99| 中文字幕日韩一区| 欧美精品色综合| 成人午夜精品一区二区三区| 天堂av在线一区| 国产精品国模大尺度视频| 3751色影院一区二区三区| 丁香亚洲综合激情啪啪综合| 午夜精品一区二区三区免费视频| www精品美女久久久tv| 欧美在线一区二区三区| 国产综合一区二区| 亚洲福中文字幕伊人影院| 国产欧美精品一区| 欧美高清视频在线高清观看mv色露露十八| 激情综合色播激情啊| 亚洲自拍偷拍图区| 国产人久久人人人人爽| 678五月天丁香亚洲综合网| 本田岬高潮一区二区三区| 奇米777欧美一区二区| 亚洲一级在线观看| 综合色中文字幕| 国产午夜精品福利| 日韩欧美国产午夜精品| 欧美无砖砖区免费| 色噜噜狠狠成人网p站| 国产乱码精品一区二区三 | 国产亚洲欧美色| 欧美一区二区精品在线| 在线免费观看日本欧美| a亚洲天堂av| www.99精品| 成人91在线观看| 国产999精品久久| 国产一区不卡在线| 国模冰冰炮一区二区| 老司机精品视频在线| 日韩高清在线观看| 婷婷丁香久久五月婷婷| 亚洲v中文字幕| 丝袜美腿一区二区三区| 亚洲一区二区在线观看视频| 一区二区三区中文在线| 国产精品人成在线观看免费 | 日韩专区中文字幕一区二区| 亚洲午夜精品网| 亚洲电影在线播放| 亚洲高清中文字幕| 日韩av一区二区三区| 日本怡春院一区二区| 日韩av一级片| 麻豆精品蜜桃视频网站| 美女在线一区二区| 国产一区二区三区观看| 国产精品亚洲午夜一区二区三区| 另类小说综合欧美亚洲| 国产一区 二区 三区一级| 成人免费视频一区二区| 99久久综合国产精品| 日本久久一区二区| 欧洲色大大久久| 日韩一区二区在线看| 精品国产麻豆免费人成网站| 2019国产精品| 亚洲另类一区二区| 日本美女视频一区二区| 国产在线乱码一区二区三区| 不卡电影免费在线播放一区| 色先锋资源久久综合| 欧美美女黄视频| 久久久久久久久久看片| 中文字幕一区二区三中文字幕| 亚洲国产精品视频| 精品一区二区三区视频在线观看| 国产盗摄视频一区二区三区| 91在线码无精品| 日韩欧美激情在线| ...中文天堂在线一区| 蜜臀va亚洲va欧美va天堂| 国产成人av电影| 7777精品伊人久久久大香线蕉| 欧美成人性福生活免费看| 亚洲欧美一区二区三区久本道91| 美腿丝袜一区二区三区| 99九九99九九九视频精品| 91麻豆精品91久久久久久清纯| 国产精品久久看| 久久精品国产精品亚洲红杏| 91国偷自产一区二区开放时间| 精品国产乱码久久久久久闺蜜| 亚洲欧美日本在线| 国产美女一区二区三区| 欧美日韩日日夜夜| 亚洲欧美另类图片小说| 国内精品视频一区二区三区八戒|