From b90c61663c32cdc6cfc0e78070e2a94a14cb2f8e Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Fri, 28 Sep 2007 21:54:23 +0200 Subject: [PATCH 1/1] Make com_lsblob() and com_lsatt() more similar to each other. --- attribute.c | 14 +++++++------- blob.c | 44 +++++++++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/attribute.c b/attribute.c index c8c6b07f..b8d4a593 100644 --- a/attribute.c +++ b/attribute.c @@ -101,7 +101,7 @@ int get_attribute_bitnum_by_name(const char *att_name, unsigned char *bitnum) enum lsatt_flags { /** Whether "-a" was given for the lsatt command. */ - LSATT_FLAG_ALPHA = 1, + LSATT_FLAG_SORT_BY_ID = 1, /** Whether "-l" was given for the lsatt command. */ LSATT_FLAG_LONG = 2, LSATT_FLAG_REVERSE = 4 @@ -129,7 +129,7 @@ static int print_attribute(struct osl_table *table, struct osl_row *row, ret = osl_get_object(table, row, ATTCOL_BITNUM, &bitnum_obj); if (ret < 0) { para_printf(&laad->pb, "%s: %s\n", name, PARA_STRERROR(-ret)); - return 1; + return ret; } para_printf(&laad->pb, "%u\t%s\n", *(unsigned char*)bitnum_obj.data, name); @@ -140,7 +140,6 @@ static int com_lsatt_callback(const struct osl_object *query, struct osl_object *result) { struct lsatt_action_data laad = {.flags = *(unsigned *) query->data}; - int ret; struct pattern_match_data pmd = { .table = attribute_table, .loop_col_num = ATTCOL_BITNUM, @@ -151,8 +150,9 @@ static int com_lsatt_callback(const struct osl_object *query, .data = &laad, .action = print_attribute }; + int ret; - if (laad.flags & LSATT_FLAG_ALPHA) + if (laad.flags & LSATT_FLAG_SORT_BY_ID) pmd.loop_col_num = ATTCOL_NAME; if (laad.flags & LSATT_FLAG_REVERSE) pmd.pm_flags |= PM_REVERSE_LOOP; @@ -160,7 +160,7 @@ static int com_lsatt_callback(const struct osl_object *query, if (ret < 0) para_printf(&laad.pb, "%s\n", PARA_STRERROR(-ret)); if (!laad.pb.buf) - para_printf(&laad.pb, "no match\n"); + return 0; result->data = laad.pb.buf; result->size = laad.pb.size; return 1; @@ -181,8 +181,8 @@ int com_lsatt(int fd, int argc, char * const * const argv) i++; break; } - if (!strcmp(arg, "-a")) { - flags |= LSATT_FLAG_ALPHA; + if (!strcmp(arg, "-i")) { + flags |= LSATT_FLAG_SORT_BY_ID; continue; } if (!strcmp(arg, "-l")) { diff --git a/blob.c b/blob.c index b2e2cd6d..8438e73f 100644 --- a/blob.c +++ b/blob.c @@ -53,60 +53,62 @@ enum blob_ls_flags { }; /** Structure passed to the \p print_blob function. */ -struct lsblob_data { +struct lsblob_action_data { uint32_t flags; struct para_buffer pb; }; -static int print_blob(struct osl_table *table, struct osl_row *row, const char *name, void *data) +static int print_blob(struct osl_table *table, struct osl_row *row, + const char *name, void *data) { + struct lsblob_action_data *lbad = data; struct osl_object obj; uint32_t id; int ret; - struct lsblob_data *lbd = data; - if (!(lbd->flags & BLOB_LS_FLAG_LONG)) { - para_printf(&lbd->pb, "%s\n", name); + if (!(lbad->flags & BLOB_LS_FLAG_LONG)) { + para_printf(&lbad->pb, "%s\n", name); return 1; } ret = osl_get_object(table, row, BLOBCOL_ID, &obj); - if (ret < 0) + if (ret < 0) { + para_printf(&lbad->pb, "%s: %s\n", name, PARA_STRERROR(-ret)); return ret; + } id = *(uint32_t *)obj.data; - para_printf(&lbd->pb, "%u\t%s\n", id, name); + para_printf(&lbad->pb, "%u\t%s\n", id, name); return 1; } -int com_lsblob_callback(struct osl_table *table, - const struct osl_object *query, struct osl_object *ls_output) +static int com_lsblob_callback(struct osl_table *table, + const struct osl_object *query, struct osl_object *result) { - struct lsblob_data lbd = {.flags = *(uint32_t *)query}; + struct lsblob_action_data lbad = {.flags = *(uint32_t *)query}; struct pattern_match_data pmd = { .table = table, .patterns = {.data = (char *)query->data + sizeof(uint32_t), .size = query->size - sizeof(uint32_t)}, .pm_flags = PM_NO_PATTERN_MATCHES_EVERYTHING | PM_SKIP_EMPTY_NAME, .match_col_num = BLOBCOL_NAME, - .data = &lbd, + .data = &lbad, .action = print_blob, }; int ret; - if (lbd.flags & BLOB_LS_FLAG_REVERSE) + if (lbad.flags & BLOB_LS_FLAG_REVERSE) pmd.pm_flags |= PM_REVERSE_LOOP; - if (!(lbd.flags & BLOB_LS_FLAG_SORT_BY_ID)) + if (!(lbad.flags & BLOB_LS_FLAG_SORT_BY_ID)) pmd.loop_col_num = BLOBCOL_ID; else pmd.loop_col_num = BLOBCOL_NAME; ret = for_each_matching_row(&pmd); - if (lbd.pb.buf) { - ls_output->data = lbd.pb.buf; - ls_output->size = lbd.pb.size; - return 1; - } - if (ret > 0) - ret = 0; - return ret; + if (ret < 0) + para_printf(&lbad.pb, "%s\n", PARA_STRERROR(-ret)); + if (!lbad.pb.buf) + return 0; + result->data = lbad.pb.buf; + result->size = lbad.pb.size; + return 1; } static int com_lsblob(callback_function *f, int fd, int argc, char * const * const argv) -- 2.30.2