save works

This commit is contained in:
Rongsong Shen 2026-03-06 18:20:30 +08:00
parent 47fc32b02c
commit 43dc12a36c
19 changed files with 80 additions and 72 deletions

View file

@ -305,10 +305,10 @@ int match_limit(xce_limit_t* limit, int global, ...)
int build_vres_name(char** vname, xce_limit_t* limit, char* user, char* queue,
char* project)
{
char resname[2 * XCE_MAXNAME_LEN + 1];
xce_consumer_t* c = NULL;
char* p = NULL;
int rc = 0;
size_t bufsize = 0;
FILE* fp = NULL;
xce_consumer_t* c = NULL;
int rc = 0;
*vname = NULL;
if ((vname == NULL) || (limit == NULL) || (user == NULL) || (queue == NULL)
@ -316,50 +316,33 @@ int build_vres_name(char** vname, xce_limit_t* limit, char* user, char* queue,
return -EINVAL;
}
memset(resname, 0x0, sizeof(resname));
p = &resname[0];
rc = sprintf(p, "limit=%s", limit->name);
if (rc < 0) {
return rc;
fp = open_memstream(vname, &bufsize);
if (fp == NULL) {
return -errno;
}
p += rc;
fprintf(fp, "limit=%s", limit->name);
c = limit->consumers[CONSUMER_USER];
if ((c != NULL) && (c->per_consumer == 1)) {
rc = sprintf(p, "/u=%s", user);
if (rc < 0) {
return rc;
}
p += rc;
fprintf(fp, "/u=%s", user);
}
c = limit->consumers[CONSUMER_QUEUE];
if ((c != NULL) && (c->per_consumer == 1)) {
rc = sprintf(p, "/q=%s", queue);
if (rc < 0) {
return rc;
}
p += rc;
fprintf(fp, "/q=%s", queue);
}
c = limit->consumers[CONSUMER_PROJECT];
if ((c != NULL) && (c->per_consumer == 1)) {
rc = sprintf(p, "/p=%s", project);
if (rc < 0) {
return rc;
}
p += rc;
fprintf(fp, "/p=%s", project);
}
*vname = strdup(resname);
fflush(fp);
fclose(fp);
if ((*vname) != NULL) {
return 1;
}