X-Git-Url: http://git.samba.org/samba.git/?p=gd%2Fsamba-autobuild%2F.git;a=blobdiff_plain;f=README.Coding;fp=README.Coding;h=e89925cad264fcf237fe8e06513fc7c6247e744c;hp=19a363fa1dd13d3f605fc9c009a55fae17cb79ac;hb=62925cfa6e796c546f9450846bb9e110f29139c0;hpb=d0381a3cf49146c0b44577a66e0c693d1edad137 diff --git a/README.Coding b/README.Coding index 19a363fa1dd..e89925cad26 100644 --- a/README.Coding +++ b/README.Coding @@ -445,6 +445,55 @@ The only exception is the test code that depends repeated use of calls like CHECK_STATUS, CHECK_VAL and others. +Error and out logic +------------------- + +Don't do this: + + frame = talloc_stackframe(); + + if (ret == LDB_SUCCESS) { + if (result->count == 0) { + ret = LDB_ERR_NO_SUCH_OBJECT; + } else { + struct ldb_message *match = + get_best_match(dn, result); + if (match == NULL) { + TALLOC_FREE(frame); + return LDB_ERR_OPERATIONS_ERROR; + } + *msg = talloc_move(mem_ctx, &match); + } + } + + TALLOC_FREE(frame); + return ret; + +It should be: + + frame = talloc_stackframe(); + + if (ret != LDB_SUCCESS) { + TALLOC_FREE(frame); + return ret; + } + + if (result->count == 0) { + TALLOC_FREE(frame); + return LDB_ERR_NO_SUCH_OBJECT; + } + + match = get_best_match(dn, result); + if (match == NULL) { + TALLOC_FREE(frame); + return LDB_ERR_OPERATIONS_ERROR; + } + + *msg = talloc_move(mem_ctx, &match); + TALLOC_FREE(frame); + return LDB_SUCCESS; + + DEBUG statements ----------------