/* Write the textual representation of *PART into P and return a pointer * to the first position behind that string. */ static char * unparse_id_part(char *p, const svn_fs_fs__id_part_t *part) { if (SVN_IS_VALID_REVNUM(part->revision)) { /* ordinary old style / new style ID */ p += svn__ui64tobase36(p, part->number); if (part->revision > 0) { *(p++) = '-'; p += svn__i64toa(p, part->revision); } } else { /* in txn: mark with "_" prefix */ *(p++) = '_'; p += svn__ui64tobase36(p, part->number); } *(p++) = '.'; return p; }
svn_stringbuf_t * svn_fs_fs__unparse_representation(representation_t *rep, int format, svn_boolean_t mutable_rep_truncated, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { char buffer[SVN_INT64_BUFFER_SIZE]; if (svn_fs_fs__id_txn_used(&rep->txn_id) && mutable_rep_truncated) return svn_stringbuf_ncreate("-1", 2, result_pool); if (format < SVN_FS_FS__MIN_REP_SHARING_FORMAT || !rep->has_sha1) return svn_stringbuf_createf (result_pool, "%ld %" APR_UINT64_T_FMT " %" SVN_FILESIZE_T_FMT " %" SVN_FILESIZE_T_FMT " %s", rep->revision, rep->item_index, rep->size, rep->expanded_size, format_digest(rep->md5_digest, svn_checksum_md5, FALSE, scratch_pool)); svn__ui64tobase36(buffer, rep->uniquifier.number); return svn_stringbuf_createf (result_pool, "%ld %" APR_UINT64_T_FMT " %" SVN_FILESIZE_T_FMT " %" SVN_FILESIZE_T_FMT " %s %s %s/_%s", rep->revision, rep->item_index, rep->size, rep->expanded_size, format_digest(rep->md5_digest, svn_checksum_md5, FALSE, scratch_pool), format_digest(rep->sha1_digest, svn_checksum_sha1, !rep->has_sha1, scratch_pool), svn_fs_fs__id_txn_unparse(&rep->uniquifier.noderev_txn_id, scratch_pool), buffer); }
svn_string_t * svn_fs_fs__id_unparse(const svn_fs_id_t *fs_id, apr_pool_t *pool) { char string[6 * SVN_INT64_BUFFER_SIZE + 10]; const fs_fs__id_t *id = (const fs_fs__id_t *)fs_id; char *p = unparse_id_part(string, &id->private_id.node_id); p = unparse_id_part(p, &id->private_id.copy_id); if (svn_fs_fs__id_txn_used(&id->private_id.txn_id)) { *(p++) = 't'; p += svn__i64toa(p, id->private_id.txn_id.revision); *(p++) = '-'; p += svn__ui64tobase36(p, id->private_id.txn_id.number); } else { *(p++) = 'r'; p += svn__i64toa(p, id->private_id.rev_item.revision); *(p++) = '/'; p += svn__i64toa(p, id->private_id.rev_item.number); } return svn_string_ncreate(string, p - string, pool); }
const char * svn_fs_fs__id_txn_unparse(const svn_fs_fs__id_part_t *txn_id, apr_pool_t *pool) { char string[2 * SVN_INT64_BUFFER_SIZE + 1]; char *p = string; p += svn__i64toa(p, txn_id->revision); *(p++) = '-'; p += svn__ui64tobase36(p, txn_id->number); return apr_pstrmemdup(pool, string, p - string); }