If you have problem to use subversion under redmine, but svn command itself works ok, the problem might be in incorrect home directory configured for user which is running redmine (can be apache user, fcgi user id…etc). Incorrect here means home directory points to a file instead of directory (ie. /dev/null) . One can reproduce this with setting HOME to point to file.
Example:
$ HOME=/dev/null svn --version
svn: Can't open file '/dev/null/.subversion/servers': Not a directory
$ HOME=/dev/null svn --version --quiet
svn: Can't open file '/dev/null/.subversion/servers': Not a directory
Solution is pretty simple, just change user home directory configuration (via usermod) or set somehow $HOME variable of the redmine execution environment to point to some directory (ie. HOME=/var/empty).
This misbehavior has been reported as subversion defect.
Valid till 30.6.2011. First takes 
5RH2-XZEY-HWSY-87FH-JN9A
Enjoy.
Just created a quick patch against perl XML::LibXML module, that adds global external entity loader support. Till now it was only possible to have per instance entity loader, but this is not enough if you want i.e., XML::LibXSLT to also use yours entity loader for imports, and input callbacks doesn’t suit all your needs.
Usage is simple:
XML::LibXML::externalEntityLoader(\&_entity_handler);
where _entity_handler is subroutine like by option ext_ent_handler described in (http://search.cpan.org/dist/XML-LibXML/lib/XML/LibXML/Parser.pod#PARSER_OPTIONS).
Note: when you define global entity loader, per instance entity loader is simply ignored.
You can download this patch from http://devel.dob.sk/patches/perl-XML::LibXML+global_entity_loader-0.1.diff. Just download XML::LibXML from cpan, patch it and install. I’ll try to push it to CPAN if possible 
If you get following compilation error while emerging xen (resp. xen-tools):
arch/i386/core/cpu.c: In function 'get_cpuinfo':
arch/i386/include/bits/cpu.h:79:2: error: can't find a register in class 'BREG' while reloading 'asm'
arch/i386/include/bits/cpu.h:79:2: error: can't find a register in class 'BREG' while reloading 'asm'
arch/i386/include/bits/cpu.h:79:2: error: can't find a register in class 'BREG' while reloading 'asm'
arch/i386/include/bits/cpu.h:79:2: error: can't find a register in class 'BREG' while reloading 'asm'
arch/i386/include/bits/cpu.h:79:2: error: 'asm' operand has impossible constraints
arch/i386/include/bits/cpu.h:79:2: error: 'asm' operand has impossible constraints
arch/i386/include/bits/cpu.h:79:2: error: 'asm' operand has impossible constraints
arch/i386/include/bits/cpu.h:79:2: error: 'asm' operand has impossible constraints
make[7]: *** [bin/cpu.o] Error 1
make[7]: *** Waiting for unfinished jobs....
Than you should not only switch to non-hardened gentoo profile as everywhere is written (via eselect profile), but you need also to switch to vanilla gcc compilator (via gcc-config). Doing just one thing is not enough – thats the magic. You can switch back your profile & gcc back when xen compiled.
Just a short example C implementation of Oracle VARNUM/NUMBER type encoding, in case you could not use library functions. I didn’t found it anywhere when needed (and afterwards I found it doesn’t helps me at all due to little ‘problem’ in ora
) and Oracle documentation is pretty unclear about how-to do it.
typedef struct
{
uint8_t len;
uint8_t exp;
uint8_t man[20];
} VARNUM_t;
static void setVARNUM(VARNUM_t *varnum, int64_t value)
{
int8_t digits = 0;
uint64_t u_value = 0;
/* init */
memset(varnum, 0, sizeof(*varnum));
varnum->len = 1; //start len
/* check sign */
if(value >= 0)
{
u_value = value;
varnum->exp = trunc(log(u_value) / log(100)) + 128 + 65;
}
else
{
u_value = value * - 1;
varnum->exp = trunc(log(u_value) / log(100)) + 128 + 65;
varnum->exp = ~varnum->exp;
}
/* count value digits */
digits = trunc(log(u_value) / log(10));
digits = ((digits / 2) + 1);
/* mantisa */
for(; digits >= 0 && varnum->len <= 20; digits--)
{
uint64_t v_tmp = 0;
/* prevent INT overflow for too much digits */
if(digits > 0)
{
uint64_t v_pow = powl(100, digits - 1);
v_tmp = ((u_value / v_pow) / 100) % 100;
}
else
v_tmp = u_value % 100;
if(!v_tmp)
continue;
/* +1 for positive, subtract 101 for negative */
v_tmp = (value < 0 ? (101 - v_tmp) : (v_tmp + 1));
varnum->man[varnum->len - 1] = v_tmp;
varnum->len++;
}
/* terminator byte for negative value */
if(value < 0 && varnum->len <= 20) {
varnum->man[varnum->len - 1] = 102;
varnum->len++;
}
return;
}NUMBER is just the same as VARNUM but without len member, thus is one byte shorter.
Note: this is just a quick implementation that works, there are some easy optimizations possible…