1 /* radare - LGPL - Copyright 2020 - pancake */
2
3 // project class definition to be used by project.c
4
5 #include <r_core.h>
6
r_project_new(void)7 R_API RProject *r_project_new(void) {
8 RProject *p = R_NEW0 (RProject);
9 return p;
10 }
11
r_project_rename(RProject * p,const char * newname)12 R_API bool r_project_rename(RProject *p, const char *newname) {
13 if (!r_project_is_loaded (p)) {
14 return false;
15 }
16 char *newprjdir = r_file_new (p->path, "..", newname, NULL);
17 if (r_file_exists (newprjdir)) {
18 eprintf ("Cannot rename.\n");
19 free (newprjdir);
20 return false;
21 }
22 r_file_move (p->path, newprjdir);
23 free (p->path);
24 p->path = newprjdir;
25 free (p->name);
26 p->name = strdup (newname);
27 return false;
28 }
29
r_project_is_git(RProject * p)30 R_API bool r_project_is_git(RProject *p) {
31 char *f = r_str_newf ("%s"R_SYS_DIR".git", p->path);
32 bool ig = r_file_is_directory (f);
33 free (f);
34 return ig;
35 }
36
r_project_close(RProject * p)37 R_API void r_project_close(RProject *p) {
38 // close the current project
39 R_FREE (p->name);
40 R_FREE (p->path);
41 }
42
r_project_open(RProject * p,const char * name,const char * path)43 R_API bool r_project_open(RProject *p, const char *name, const char *path) {
44 r_return_val_if_fail (p && !R_STR_ISEMPTY (name), false);
45 if (r_project_is_loaded (p)) {
46 if (!strcmp (name, p->name)) {
47 return true;
48 }
49 return false;
50 }
51 p->name = strdup (name);
52 if (path) {
53 p->path = strdup (path);
54 }
55 return true;
56 }
57
r_project_save(RProject * p)58 R_API void r_project_save(RProject *p) {
59 // must call r_core_project_save()
60 }
61
r_project_free(RProject * p)62 R_API void r_project_free(RProject *p) {
63 if (p) {
64 free (p->name);
65 free (p->path);
66 free (p);
67 }
68 }
69
r_project_is_loaded(RProject * p)70 R_API bool r_project_is_loaded(RProject *p) {
71 return !R_STR_ISEMPTY (p->name);
72 }
73