From af27b1b1828cc3c9d9157905771fb38f4a929110 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Wed, 26 Sep 2007 11:29:07 +0200 Subject: [PATCH 1/1] addblob: Overwrite existing blobs. Previously, an attempt to add a blob with a name of an already existing blob failed (siltenly). Just replace the existing blob with the new contents instead. --- blob.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/blob.c b/blob.c index 74b1c4f5..84dec32d 100644 --- a/blob.c +++ b/blob.c @@ -336,9 +336,21 @@ static int com_addblob_callback(struct osl_table *table, ret = osl_add_row(table, objs); if (ret < 0) return ret; - } else { /* get id of the dummy row and increment it */ + } else { + /* check if name already exists */ struct osl_row *row; - struct osl_object obj = {.data = "", .size = 1}; + struct osl_object obj = {.data = name, .size = name_len}; + ret = osl_get_row(table, BLOBCOL_NAME, &obj, &row); + if (ret < 0 && ret != -E_RB_KEY_NOT_FOUND) + return ret; + if (ret >= 0) { /* we already have a blob with this name */ + obj.data = name + name_len; + obj.size = query->size - name_len; + return osl_update_object(table, row, BLOBCOL_DEF, &obj); + } + /* new blob, get id of the dummy row and increment it */ + obj.data = ""; + obj.size = 1; ret = osl_get_row(table, BLOBCOL_NAME, &obj, &row); if (ret < 0) return ret; -- 2.39.2