]>
git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - libfrog/projects.c
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2005 Silicon Graphics, Inc.
12 #define PROJID "/etc/projid"
13 #define PROJECT_PATHS "/etc/projects"
17 static FILE *projects
;
19 static FILE *project_paths
;
27 projects_file
= PROJECT_PATHS
;
34 projects
= fopen(projid_file
, "r");
41 project_paths
= fopen(projects_file
, "r");
56 fclose(project_paths
);
63 static fs_project_t p
;
64 static char projects_buffer
[512];
65 char *idstart
, *idend
;
66 size_t size
= sizeof(projects_buffer
) - 1;
71 if (!fgets(projects_buffer
, size
, projects
))
74 * /etc/projid file format -- "name:id\n", ignore "^#..."
76 if (projects_buffer
[0] == '#')
78 idstart
= strchr(projects_buffer
, ':');
81 if ((idstart
+ 1) - projects_buffer
>= size
)
83 idend
= strchr(idstart
+1, ':');
87 p
.pr_prid
= atoi(idstart
+1);
88 p
.pr_name
= &projects_buffer
[0];
99 fs_project_t
*p
= NULL
;
102 while ((p
= getprent()) != NULL
)
103 if (strcmp(p
->pr_name
, name
) == 0)
113 fs_project_t
*p
= NULL
;
116 while ((p
= getprent()) != NULL
)
117 if (p
->pr_prid
== prid
)
126 static fs_project_path_t pp
;
127 static char project_paths_buffer
[1024];
128 char *nmstart
, *nmend
;
129 size_t size
= sizeof(project_paths_buffer
) - 1;
134 if (!fgets(project_paths_buffer
, size
, project_paths
))
137 * /etc/projects format -- "id:pathname\n", ignore "^#..."
139 if (project_paths_buffer
[0] == '#')
141 nmstart
= strchr(project_paths_buffer
, ':');
144 if ((nmstart
+ 1) - project_paths_buffer
>= size
)
146 nmend
= strchr(nmstart
+ 1, '\n');
150 pp
.pp_pathname
= nmstart
+ 1;
151 pp
.pp_prid
= atoi(&project_paths_buffer
[0]);
167 if (xfsctl(name
, fd
, FS_IOC_FSGETXATTR
, &fsx
)) {
168 perror("FS_IOC_FSGETXATTR");
171 *projid
= fsx
.fsx_projid
;
184 if ((error
= xfsctl(name
, fd
, FS_IOC_FSGETXATTR
, &fsx
)) == 0) {
185 fsx
.fsx_projid
= projid
;
186 error
= xfsctl(name
, fd
, FS_IOC_FSSETXATTR
, &fsx
);