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