~iaz/+junk/diskutil

« back to all changes in this revision

Viewing changes to lib/archives.cpp

  • Committer: ivan.a.zorin at gmail
  • Date: 2011-07-10 19:57:59 UTC
  • Revision ID: ivan.a.zorin@gmail.com-20110710195759-m1rtbzt61esyjxv6
lib/archives: add basic support for mount/umount tgz/bzip archives via gvfs frontend

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include "archives.hpp"
 
3
 
 
4
 
 
5
int archives::mount()
 
6
{
 
7
        printf("%s\n", path);
 
8
        char gvfs_archive_path[PATH_MAX];
 
9
        int i = 0, j = 0;
 
10
        for (i = 0; i < strlen(path); i++) {
 
11
                if (path[i] == '/') {
 
12
                        /* authors of gvfsd-archive frontend cannot into URI decode */
 
13
                        gvfs_archive_path[j++] = '%';
 
14
                        gvfs_archive_path[j++] = '2';
 
15
                        gvfs_archive_path[j++] = '5';
 
16
                        gvfs_archive_path[j++] = '2';
 
17
                        gvfs_archive_path[j++] = 'F';
 
18
                } else {
 
19
                        gvfs_archive_path[j++] = path[i];
 
20
                }
 
21
        }
 
22
        
 
23
        char *gvfs_prefix = "archive://file%253A%252F%252F";
 
24
        char gvfs_archive[PATH_MAX];
 
25
        strcpy(gvfs_archive, gvfs_prefix);
 
26
        strcat(gvfs_archive, gvfs_archive_path);
 
27
        
 
28
        char *gvfs_mount = "gvfs-mount";
 
29
        char *const gvfs[] = {gvfs_mount, gvfs_archive, NULL};
 
30
        
 
31
        exec(gvfs_mount, gvfs);
 
32
        
 
33
        return 0;
 
34
}
 
35
 
 
36
int archives::umount()
 
37
{
 
38
        char gvfs_archive_path[PATH_MAX];
 
39
        int i = 0, j = 0;
 
40
        for (i = 0; i < strlen(path); i++) {
 
41
                if (path[i] == '/') {
 
42
                        /* authors of gvfsd-archive frontend cannot into URI decode */
 
43
                        gvfs_archive_path[j++] = '%';
 
44
                        gvfs_archive_path[j++] = '2';
 
45
                        gvfs_archive_path[j++] = '5';
 
46
                        gvfs_archive_path[j++] = '2';
 
47
                        gvfs_archive_path[j++] = 'F';
 
48
                } else {
 
49
                        gvfs_archive_path[j++] = path[i];
 
50
                }
 
51
        }
 
52
        
 
53
        char *gvfs_prefix = "archive://file%253A%252F%252F";
 
54
        char gvfs_archive[PATH_MAX];
 
55
        strcpy(gvfs_archive, gvfs_prefix);
 
56
        strcat(gvfs_archive, gvfs_archive_path);
 
57
        
 
58
        char *gvfs_mount = "gvfs-mount";
 
59
        char *const gvfs[] = {gvfs_mount, "-u", gvfs_archive, NULL};
 
60
        
 
61
        exec(gvfs_mount, gvfs);
 
62
        
 
63
        return 0;
 
64
}