Skip to content

Commit 4ee0a45

Browse files
committed
1.0 release
1. fix register bugs 2. create root directory on register 3. database case Sensitive 4. add mkdir command 5. rm support directory 6. pwd, cd, rm result more reasonable
1 parent a12ceff commit 4ee0a45

File tree

11 files changed

+431
-134
lines changed

11 files changed

+431
-134
lines changed

bin/cmd.c

Lines changed: 118 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,29 @@
11
#include "../include/cmd.h"
22

3+
void get_file_name(char* file_name, const char* cmd_path)
4+
{
5+
int len = strlen(cmd_path);
6+
while (cmd_path[len] != '/' && len != -1)
7+
{
8+
len--;
9+
}
10+
len++;
11+
int i = 0;
12+
while (cmd_path[len] != '\0')
13+
{
14+
file_name[i++] = cmd_path[len++];
15+
}
16+
file_name[i] = '\0';
17+
}
18+
319
char* convert_path(const char* path, MYSQL* conn, const char* root_id, const char* cur_dir_id)
420
{
521
char* abs_path = (char*)malloc(RESULT_LEN);
622
MYSQL_RES* res;
723
MYSQL_ROW row;
824
if (path[0] == '/') //strat with user root dir
925
{
10-
res = sql_select(conn, "file", "id", root_id);
26+
res = sql_select(conn, "file", "id", root_id, 0);
1127
row = mysql_fetch_row(res);
1228
mysql_free_result(res);
1329
strcpy(abs_path, row[5]);
@@ -20,10 +36,10 @@ char* convert_path(const char* path, MYSQL* conn, const char* root_id, const cha
2036
}
2137
if (path[0] == '.' && path[1] == '.') //start with parent dir
2238
{
23-
res = sql_select(conn, "file", "id", cur_dir_id);
39+
res = sql_select(conn, "file", "id", cur_dir_id, 0);
2440
row = mysql_fetch_row(res);
2541
mysql_free_result(res);
26-
res = sql_select(conn, "file", "id", row[1]);
42+
res = sql_select(conn, "file", "id", row[1], 0);
2743
row = mysql_fetch_row(res);
2844
mysql_free_result(res);
2945
if (atoi(row[1]) == -1)
@@ -49,7 +65,7 @@ char* convert_path(const char* path, MYSQL* conn, const char* root_id, const cha
4965
}
5066
else //start with cur dir
5167
{
52-
res = sql_select(conn, "file", "id", cur_dir_id);
68+
res = sql_select(conn, "file", "id", cur_dir_id, 0);
5369
row = mysql_fetch_row(res);
5470
mysql_free_result(res);
5571
if (strcmp(path, "./") == 0 || strcmp(path, ".") == 0)
@@ -81,7 +97,7 @@ int resolve_ls(char*** result, int *n, const char* path, MYSQL* conn, const char
8197
MYSQL_ROW row;
8298
if (strlen(path) == 0) //only ls
8399
{
84-
res = sql_select(conn, "file", "dir_id", cur_dir_id);
100+
res = sql_select(conn, "file", "dir_id", cur_dir_id, 0);
85101
if (res == NULL)
86102
{
87103
*n = 0;
@@ -96,7 +112,7 @@ int resolve_ls(char*** result, int *n, const char* path, MYSQL* conn, const char
96112
{
97113
return -1;
98114
}
99-
res = sql_select(conn, "file","file_path", abs_path);
115+
res = sql_select(conn, "file","file_path", abs_path, 0);
100116
free(abs_path);
101117
abs_path = NULL;
102118
if (res == NULL)
@@ -108,7 +124,7 @@ int resolve_ls(char*** result, int *n, const char* path, MYSQL* conn, const char
108124
if (atoi(row[2]) == 0) //is dir
109125
{
110126
mysql_free_result(res);
111-
res = sql_select(conn, "file", "dir_id", row[0]);
127+
res = sql_select(conn, "file", "dir_id", row[0], 0);
112128
if (res == NULL) //empty dir
113129
{
114130
*n = 0;
@@ -147,18 +163,30 @@ int resolve_ls(char*** result, int *n, const char* path, MYSQL* conn, const char
147163
return 1;
148164
}
149165

150-
int resolve_pwd(char*** result, int *n, MYSQL* conn, const char* cur_dir_id)
166+
int resolve_pwd(char*** result, int *n, MYSQL* conn, const char* cur_dir_id, int name_len)
151167
{
152168
MYSQL_RES* res;
153169
MYSQL_ROW row;
154-
res = sql_select(conn, "file", "id", cur_dir_id);
170+
res = sql_select(conn, "file", "id", cur_dir_id, 0);
155171
row = mysql_fetch_row(res);
156172
*n = 1;
157173
*result = (char**)malloc(sizeof(char*));
158174
(*result)[0] = (char*)malloc(RESULT_LEN);
159-
strcpy((*result)[0], row[5]);
160-
mysql_free_result(res);
175+
if (row[5][8 + name_len + 1] == '\0')
176+
{
177+
mysql_free_result(res);
178+
strcpy((*result)[0], "/");
179+
return 1;
180+
}
181+
else
182+
{
183+
for (int i = 8 + name_len + 1; row[5][i - 1] != '\0'; i++)
184+
{
185+
(*result)[0][i - 8 - name_len - 1] = row[5][i];
186+
}
187+
mysql_free_result(res);
161188
return 1;
189+
}
162190
}
163191

164192
int resolve_cd(char*** result, int *n, const char* cmd_path, MYSQL* conn, char* cur_dir_id, const char* root_id)
@@ -171,7 +199,7 @@ int resolve_cd(char*** result, int *n, const char* cmd_path, MYSQL* conn, char*
171199
{
172200
return -2;
173201
}
174-
res = sql_select(conn, "file", "file_path", abs_path);
202+
res = sql_select(conn, "file", "file_path", abs_path, 0);
175203
free(abs_path);
176204
abs_path = NULL;
177205
if (res == NULL)
@@ -184,18 +212,50 @@ int resolve_cd(char*** result, int *n, const char* cmd_path, MYSQL* conn, char*
184212
if (atoi(row[2]) == 0) //is dir
185213
{
186214
strcpy(cur_dir_id, row[0]);
187-
*n = 1;
188-
*result = (char**)malloc(sizeof(char*));
189-
(*result)[0] = (char*)malloc(RESULT_LEN);
190-
strcpy((*result)[0], row[5]);
191-
return 2;
215+
int ret;
216+
ret = resolve_ls(result, n, "", conn, cur_dir_id, root_id);
217+
return ret;
192218
}
193219
else //is file
194220
{
195221
return -2;
196222
}
197223
}
198224

225+
int resolve_mkdir(char*** result, int *n, const char* user_name, const char* cmd_path, MYSQL* conn, const char* cur_dir_id, const char* root_id)
226+
{
227+
int ret;
228+
MYSQL_RES* res;
229+
230+
char file_name[FILE_NAME_LEN];
231+
get_file_name(file_name, cmd_path);
232+
233+
char* abs_path;
234+
abs_path = convert_path(cmd_path, conn, root_id, cur_dir_id);
235+
if (abs_path == NULL)
236+
{
237+
return -4;
238+
}
239+
res = sql_select(conn, "file", "file_path", abs_path, 0);
240+
free(abs_path);
241+
abs_path = NULL;
242+
if (res == NULL)
243+
{
244+
ret = sql_insert_file_trans(conn, user_name, cur_dir_id, 0, file_name, 0, NULL);
245+
if (ret == -1)
246+
{
247+
return -4;
248+
}
249+
ret = resolve_ls(result, n, "", conn, cur_dir_id, root_id);
250+
return ret;
251+
}
252+
else
253+
{
254+
mysql_free_result(res);
255+
return -4;
256+
}
257+
}
258+
199259
int resolve_gets(char* file_md5, char* file_name, char* file_size, const char* path, MYSQL* conn, const char* root_id, const char* cur_dir_id)
200260
{
201261
char* abs_path;
@@ -207,7 +267,7 @@ int resolve_gets(char* file_md5, char* file_name, char* file_size, const char* p
207267
{
208268
return -1;
209269
}
210-
res = sql_select(conn, "file", "file_path", abs_path);
270+
res = sql_select(conn, "file", "file_path", abs_path, 0);
211271
free(abs_path);
212272
abs_path = NULL;
213273
if (res == NULL)
@@ -235,27 +295,16 @@ int resolve_puts(const char* cmd_path, MYSQL* conn, const char* root_id, const c
235295
{
236296
MYSQL_RES* res;
237297
char* abs_path;
238-
char file_name[FILE_NAME_LEN];
239298

240-
int len = strlen(cmd_path);
241-
while (cmd_path[len] != '/' && len != -1)
242-
{
243-
len--;
244-
}
245-
len++;
246-
int i;
247-
while (cmd_path[len] != '\0')
248-
{
249-
file_name[i++] = cmd_path[len++];
250-
}
251-
file_name[i] = '\0';
299+
char file_name[FILE_NAME_LEN];
300+
get_file_name(file_name, cmd_path);
252301

253302
abs_path = convert_path(file_name, conn, root_id, cur_dir_id);
254303
if (abs_path == NULL)
255304
{
256305
return -1;
257306
}
258-
res = sql_select(conn, "file", "file_path", abs_path);
307+
res = sql_select(conn, "file", "file_path", abs_path, 0);
259308
free(abs_path);
260309
abs_path = NULL;
261310
if (res == NULL)
@@ -272,18 +321,27 @@ int resolve_puts(const char* cmd_path, MYSQL* conn, const char* root_id, const c
272321
}
273322
}
274323

275-
int resolve_rm(const char* cmd_path, MYSQL* conn, const char* user_name, const char* root_id, const char* cur_dir_id)
324+
int resolve_rm(const char* cmd_path, int abs_flag, MYSQL* conn, const char* user_name, const char* root_id, const char* cur_dir_id)
276325
{
277326
char* abs_path;
327+
int ret, num;
278328
MYSQL_RES* res;
279329
MYSQL_ROW row;
280330

281-
abs_path = convert_path(cmd_path, conn, root_id, cur_dir_id);
331+
if (abs_flag == 0)
332+
{
333+
abs_path = convert_path(cmd_path, conn, root_id, cur_dir_id);
334+
}
335+
else
336+
{
337+
abs_path = (char*)malloc(RESULT_LEN);
338+
strcpy(abs_path, cmd_path);
339+
}
282340
if (abs_path == NULL)
283341
{
284342
return -3;
285343
}
286-
res = sql_select(conn, "file", "file_path", abs_path);
344+
res = sql_select(conn, "file", "file_path", abs_path, 0);
287345
if (res == NULL)
288346
{
289347
return -3;
@@ -293,15 +351,36 @@ int resolve_rm(const char* cmd_path, MYSQL* conn, const char* user_name, const c
293351
mysql_free_result(res);
294352
if (atoi(row[2]) == 0) //is dir
295353
{
296-
return -3;
354+
ret = sql_delete_file(conn, user_name, abs_path);
355+
if (ret == -1)
356+
{
357+
return -3;
358+
}
359+
char regexp[QUERY_LEN] = "^";
360+
strcat(regexp, abs_path);
361+
free(abs_path);
362+
abs_path = NULL;
363+
res = sql_select(conn, "file", "file_path", regexp, 1);
364+
if (res == NULL)
365+
{
366+
return 3;
367+
}
368+
num = mysql_num_rows(res);
369+
for (int i = 0; i < num; i++)
370+
{
371+
row = mysql_fetch_row(res);
372+
resolve_rm(row[5], 1, conn, user_name, root_id, cur_dir_id);
373+
}
374+
mysql_free_result(res);
375+
return 3;
297376
}
298377
else //is file
299378
{
300-
int ret;
301379
char file_md5[MD5_LEN];
302380
strcpy(file_md5, row[6]);
303-
res = sql_select(conn, "file", "file_md5", file_md5);
304-
int num = mysql_num_rows(res);
381+
res = sql_select(conn, "file", "file_md5", file_md5, 0);
382+
num = mysql_num_rows(res);
383+
mysql_free_result(res);
305384

306385
ret = sql_delete_file(conn, user_name, abs_path);
307386
free(abs_path);

bin/main.c

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ int main(int argc, char** argv)
244244
recv_cycle(new_fd, data.buf, data.data_len);
245245
strcpy(user_name, data.buf);
246246
MYSQL_RES* res;
247-
res = sql_select(conn, "user", "user_name", user_name);
247+
res = sql_select(conn, "user", "user_name", user_name, 0);
248248
if (res == NULL)
249249
{
250250
mysql_free_result(res);
@@ -268,7 +268,7 @@ int main(int argc, char** argv)
268268

269269
if (data.data_len == 6)
270270
{
271-
#ifdef _DEBUG
271+
#ifdef _debug
272272
printf("connection for regi password\n");
273273
#endif
274274
recv_cycle(new_fd, (char*)&data.data_len, sizeof(int)); //get username
@@ -277,13 +277,16 @@ int main(int argc, char** argv)
277277
recv_cycle(new_fd, (char*)&data.data_len, sizeof(int)); //get password
278278
recv_cycle(new_fd, data.buf, data.data_len);
279279

280-
ret = sql_insert_user(conn, user_name, data.buf);
280+
ret = sql_insert_user_trans(conn, user_name, data.buf, "1", 0, user_name, 0, "");
281281
if (ret == -1)
282282
{
283283
data.data_len = -1;
284284
}
285285
else if (ret == 0)
286286
{
287+
#ifdef _debug
288+
printf("user created\n");
289+
#endif
287290
data.data_len = 0;
288291
}
289292
send_cycle(new_fd, (char*)&data, sizeof(int));
@@ -385,18 +388,18 @@ int main(int argc, char** argv)
385388
cmd_interpret(data.buf, prefix, cmd_path);
386389
/*return:
387390
* 1 for normal cmd
388-
* 2 for cd success
389391
* 3 for rm success
390392
* -1 for ls error
391393
* -2 for cd error
392-
* -3 for rm error*/
394+
* -3 for rm error
395+
* -4 for mkdir error*/
393396
if (strcmp(prefix, "ls") == 0)
394397
{
395398
ret = resolve_ls(&result, &res_lines, cmd_path, conn, users[j].cur_dir_id, users[j].root_id);
396399
}
397400
else if (strcmp(prefix, "pwd") == 0)
398401
{
399-
ret = resolve_pwd(&result, &res_lines, conn, users[j].cur_dir_id);
402+
ret = resolve_pwd(&result, &res_lines, conn, users[j].cur_dir_id, strlen(users[j].user_name));
400403
}
401404
else if (strcmp(prefix, "cd") == 0)
402405
{
@@ -411,7 +414,11 @@ int main(int argc, char** argv)
411414
}
412415
else if (strcmp(prefix, "rm") == 0)
413416
{
414-
ret = resolve_rm(cmd_path, conn, users[j].user_name, users[j].root_id, users[j].cur_dir_id);
417+
ret = resolve_rm(cmd_path, 0, conn, users[j].user_name, users[j].root_id, users[j].cur_dir_id);
418+
}
419+
else if (strcmp(prefix, "mkdir") == 0)
420+
{
421+
ret = resolve_mkdir(&result, &res_lines, users[j].user_name, cmd_path, conn, users[j].cur_dir_id, users[j].root_id);
415422
}
416423

417424
//send result to client
@@ -425,10 +432,14 @@ int main(int argc, char** argv)
425432
{
426433
strcpy(data.buf, "cd: cannot access: No such directory");
427434
}
428-
if (ret == -3)
435+
if (ret == -3) //rm error
429436
{
430437
strcpy(data.buf, "rm: cannot remove: No such file");
431438
}
439+
if (ret == -4) //mkdir error
440+
{
441+
strcpy(data.buf, "mkdir: cannot make directory");
442+
}
432443
data.data_len = strlen(data.buf) + 1;
433444
send_cycle(users[j].fd, (char*)&data, data.data_len + sizeof(int));
434445
}
@@ -443,15 +454,10 @@ int main(int argc, char** argv)
443454
send_cycle(users[j].fd, (char*)&data, data.data_len + sizeof(int));
444455
}
445456
}
446-
if (ret == 2) //cd success
447-
{
448-
strcpy(data.buf, result[0]);
449-
data.data_len = strlen(data.buf) + 1;
450-
send_cycle(users[j].fd, (char*)&data, data.data_len + sizeof(int));
451-
}
452457
if (ret == 3) //remove success
453458
{
454459
strcpy(data.buf, cmd_path);
460+
strcat(data.buf, "\tis removed");
455461
data.data_len = strlen(data.buf) + 1;
456462
send_cycle(users[j].fd, (char*)&data, data.data_len + sizeof(int));
457463
}

0 commit comments

Comments
 (0)