Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7802 rgimad 1
 
2
{
3
    char* argv[100];
4
    int argc;
5
    char *filename_in = NULL;
6
    char *filename_out = NULL;
7
    char *buffer = NULL;
8
9
 
10
    kol_struct70 k70_out;
11
12
 
13
14
 
15
    unsigned result, buf_size;
16
17
 
18
19
 
20
	argv[0] - path (abs or rel) to file
21
	argv[1] - new location: path (abs or rel) to dir or file
22
    */
23
24
 
25
    {
26
        #if LANG_ENG
27
            printf("  mv  \n\r");
28
        #elif LANG_RUS
29
            printf("  mv <источник> <результат>\n\r");
30
        #endif
31
        parameters_free(argc, argv);
32
        return TRUE;
33
    }
34
35
 
36
    filename_out = (char*) malloc(FILENAME_MAX);
37
38
 
39
    {
40
        strcpy(filename_in, cur_dir);
41
        if (filename_in[strlen(filename_in)-1] != '/')
42
        {
43
            strcat(filename_in, "/"); // add slash
44
        }
45
        strcat(filename_in, argv[0]);
46
    } else
47
    {
48
        strcpy(filename_in, argv[0]);
49
    }
50
    // -----
51
    if (argv[1][0] != '/')
52
    {
53
        strcpy(filename_out, cur_dir);
54
        if (filename_out[strlen(filename_out)-1] != '/')
55
        {
56
            strcat(filename_out, "/"); // add slash
57
        }
58
        strcat(filename_out, argv[1]);
59
    } else
60
    {
61
        strcpy(filename_out, argv[1]);
62
    }
63
64
 
65
    if ( dir_check(filename_out) )
66
    {
67
        char *fname = strrchr(filename_in, '/') + 1;  // always exist, as we add curdir
68
        if (filename_out[strlen(filename_out)-1] != '/')
69
        {
70
            strcat(filename_out, "/"); // add slash
71
        }
72
        strcat(filename_out, fname);
73
    }
74
75
 
76
    {
77
    	result = 0;
78
    	goto lbl_exit;
79
    }
80
81
 
82
 
83
    k70_in.p04 = 0LL;
84
    k70_in.p12 = 0;
85
    k70_in.p16 = (unsigned) &bdvk;
86
    k70_in.p20 = 0;
87
    k70_in.p21 = filename_in;
88
89
 
90
    if ( 0 != result )
91
    	goto lbl_exit;
92
93
 
94
    buf_size = 1 << 20; // 1Mb
95
    while( ((buf_size >> 10) > kol_system_memfree()) && (buf_size > 4096) )
96
    	buf_size /= 2;
97
98
 
99
    if (buf_size > filesize)
100
    	buf_size = (unsigned)filesize;	// may be zero!
101
    if (buf_size == 0) buf_size = 4096;	// ...
102
103
 
104
    if (!buffer)
105
    {
106
        result = E_NOMEM;
107
        goto lbl_exit;
108
    }
109
110
 
111
    //k70_in.p08 = 0;
112
    k70_in.p12 = buf_size;
113
    k70_in.p16 = (unsigned) buffer;
114
    k70_in.p20 = 0;
115
    k70_in.p21 = filename_in;
116
117
 
118
    //k70_out.p08 = 0;
119
    k70_out.p12 = buf_size;
120
    k70_out.p16 = (unsigned) buffer;
121
    k70_out.p20 = 0;
122
    k70_out.p21 = filename_out;
123
124
 
125
    do
126
    {
127
        k70_in.p04 = offset;
128
        if (offset + buf_size > filesize)  // last chunk
129
        {
130
            k70_in.p12 = k70_out.p12 = (unsigned)(filesize - offset); // filesize % buf_size;
131
        }
132
133
 
134
        if (result != 0)
135
        {
136
            goto lbl_exit;
137
        }
138
139
 
140
        result = kol_file_70(&k70_out); // write
141
        if (result != 0)
142
        {
143
           goto lbl_exit;
144
        }
145
146
 
147
        {
148
            k70_out.p00 = 3; // changing function from create (2) to append (3)
149
        }
150
        offset += buf_size;
151
    } while (offset < filesize);
152
153
 
154
155
 
156
157
 
158
    free(filename_in);
159
    free(filename_out);
160
    free(buffer);
161
162
 
163
}
164