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); }
/* 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; }
void svn_skel__prepend_int(apr_int64_t value, svn_skel_t *skel, apr_pool_t *result_pool) { char *val_string = apr_palloc(result_pool, SVN_INT64_BUFFER_SIZE); svn__i64toa(val_string, value); svn_skel__prepend_str(val_string, skel, result_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); }