/*
- * Copyright (C) 1997-2012 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2013 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#include "afh.h"
#include "afs.h"
#include "ipc.h"
+#include "sideband.h"
#include "command.h"
static struct osl_table *attribute_table;
.flags = *(unsigned *) query->data,
.pb = {
.max_size = shm_get_shmmax(),
- .private_data = &fd,
- .max_size_handler = pass_buffer_as_shm
+ .private_data = &(struct afs_max_size_handler_data) {
+ .fd = fd,
+ .band = SBD_OUTPUT
+ },
+ .max_size_handler = afs_max_size_handler
}
};
pmd.pm_flags |= PM_REVERSE_LOOP;
for_each_matching_row(&pmd);
if (laad.pb.offset)
- pass_buffer_as_shm(laad.pb.buf, laad.pb.offset, &fd);
+ pass_buffer_as_shm(fd, SBD_OUTPUT, laad.pb.buf, laad.pb.offset);
free(laad.pb.buf);
}
}
}
ret = send_option_arg_callback_request(&options, cc->argc - i, cc->argv + i,
- com_lsatt_callback, sc_send_result, cc);
- if (!ret) {
- if (cc->argc > 1)
- ret = sc_send_va_buffer(&cc->scc, "no matches\n");
- } else if (ret < 0)
- sc_send_va_buffer(&cc->scc, "%s\n", para_strerror(-ret));
+ com_lsatt_callback, afs_cb_result_handler, cc);
+ if (ret < 0)
+ send_strerror(cc, -ret);
+ else if (ret == 0 && cc->argc > 1)
+ ret = cc->use_sideband?
+ send_sb_va(&cc->scc, SBD_ERROR_LOG, "no matches\n")
+ :
+ sc_send_va_buffer(&cc->scc, "no matches\n");
return ret;
}
int ret;
size_t len;
struct osl_object obj;
- struct osl_row *row;
for (p = query->data; p < (char *)query->data + query->size; p += len + 1) {
char c;
+ unsigned char bitnum;
len = strlen(p);
ret = -E_ATTR_SYNTAX;
if (c != '+' && c != '-')
break;
p[len - 1] = '\0';
- obj.data = p;
- obj.size = len + 1;
- ret = osl(osl_get_row(attribute_table, ATTCOL_NAME, &obj, &row));
- if (ret < 0)
- goto out;
- ret = osl(osl_get_object(attribute_table, row, ATTCOL_BITNUM,
- &obj));
+ ret = get_attribute_bitnum_by_name(p, &bitnum);
if (ret < 0)
goto out;
if (c == '+')
- add_mask |= (1UL << *(unsigned char *)obj.data);
+ add_mask |= (1UL << bitnum);
else
- del_mask |= (1UL << *(unsigned char *)obj.data);
+ del_mask |= (1UL << bitnum);
}
ret = -E_ATTR_SYNTAX;
if (!add_mask && !del_mask)
int ret = 1, ret2 = 0;
struct para_buffer pb = {
.max_size = shm_get_shmmax(),
- .private_data = &fd,
- .max_size_handler = pass_buffer_as_shm
+ .private_data = &(struct afs_max_size_handler_data) {
+ .fd = fd,
+ .band = SBD_OUTPUT
+ },
+ .max_size_handler = afs_max_size_handler
};
size_t len;
if (ret < 0 && ret2 >= 0)
para_printf(&pb, "%s: %s\n", p, para_strerror(-ret));
if (pb.offset)
- pass_buffer_as_shm(pb.buf, pb.offset, &fd);
+ pass_buffer_as_shm(fd, SBD_OUTPUT, pb.buf, pb.offset);
free(pb.buf);
}
if (cc->argc < 2)
return -E_ATTR_SYNTAX;
ret = send_standard_callback_request(cc->argc - 1, cc->argv + 1,
- com_addatt_callback, sc_send_result, cc);
+ com_addatt_callback, afs_cb_result_handler, cc);
if (ret < 0)
- sc_send_va_buffer(&cc->scc, "%s\n", para_strerror(-ret));
+ send_strerror(cc, -ret);
return ret;
}
struct osl_row *row;
struct para_buffer pb = {
.max_size = shm_get_shmmax(),
- .private_data = &fd,
- .max_size_handler = pass_buffer_as_shm
+ .private_data = &(struct afs_max_size_handler_data) {
+ .fd = fd,
+ .band = SBD_OUTPUT
+ },
+ .max_size_handler = afs_max_size_handler,
};
int ret;
else
afs_event(ATTRIBUTE_RENAME, &pb, NULL);
if (pb.offset)
- pass_buffer_as_shm(pb.buf, pb.offset, &fd);
+ pass_buffer_as_shm(fd, SBD_OUTPUT, pb.buf, pb.offset);
free(pb.buf);
}
if (cc->argc != 3)
return -E_ATTR_SYNTAX;
ret = send_standard_callback_request(cc->argc - 1, cc->argv + 1,
- com_mvatt_callback, sc_send_result, cc);
+ com_mvatt_callback, afs_cb_result_handler, cc);
if (ret < 0)
- sc_send_va_buffer(&cc->scc, "%s\n", para_strerror(-ret));
+ send_strerror(cc, -ret);
return ret;
}
.num_removed = 0,
.pb = {
.max_size = shm_get_shmmax(),
- .private_data = &fd,
- .max_size_handler = pass_buffer_as_shm
+ .private_data = &(struct afs_max_size_handler_data) {
+ .fd = fd,
+ .band = SBD_OUTPUT
+ },
+ .max_size_handler = afs_max_size_handler,
}
};
int ret, ret2 = 0;
else if (!raad.num_removed)
ret2 = para_printf(&raad.pb, "no match -- nothing removed\n");
if (ret2 >= 0 && raad.pb.offset)
- pass_buffer_as_shm(raad.pb.buf, raad.pb.offset, &fd);
+ pass_buffer_as_shm(fd, SBD_OUTPUT, raad.pb.buf, raad.pb.offset);
free(raad.pb.buf);
}
if (cc->argc < 2)
return -E_ATTR_SYNTAX;
ret = send_standard_callback_request(cc->argc - 1, cc->argv + 1,
- com_rmatt_callback, sc_send_result, cc);
+ com_rmatt_callback, afs_cb_result_handler, cc);
if (ret < 0)
- sc_send_va_buffer(&cc->scc, "%s\n", para_strerror(-ret));
+ send_strerror(cc, -ret);
return ret;
}