/* Get fd of the pipe of the already running OOo. */ static int connect_pipe( rtl_uString *pPipePath ) { int fd; size_t len; struct sockaddr_un addr; rtl_String *pPipeStr = ustr_to_str( pPipePath ); memset( &addr, 0, sizeof( addr ) ); if ( ( fd = socket( AF_UNIX, SOCK_STREAM, 0 ) ) < 0 ) return fd; (void)fcntl( fd, F_SETFD, FD_CLOEXEC ); addr.sun_family = AF_UNIX; strncpy( addr.sun_path, rtl_string_getStr( pPipeStr ), sizeof( addr.sun_path ) - 1 ); rtl_string_release( pPipeStr ); /* cut / paste from osl's pipe.c */ #if defined(FREEBSD) len = SUN_LEN( &addr ); #else len = sizeof( addr ); #endif if ( connect( fd, (struct sockaddr *)&addr, len ) < 0 ) { close(fd); fd = -1; } return fd; }
/* Compute the OOo md5 hash from 'pText' */ static rtl_uString * get_md5hash( rtl_uString *pText ) { rtl_uString *pResult = NULL; sal_Int32 nCapacity = 100; unsigned char *pData = NULL; sal_uInt32 nSize = 0; rtlDigest digest; sal_uInt32 md5_key_len = 0; sal_uInt8* md5_buf = NULL; sal_uInt32 i = 0; #if OSL_DEBUG_LEVEL > 1 rtl_String *pOut; #endif if ( !pText ) return NULL; #if OSL_DEBUG_LEVEL > 1 pOut = ustr_to_str( pText ); fprintf (stderr, "Generate pipe md5 for '%s'\n", pOut->buffer); rtl_string_release( pOut ); #endif pData = (unsigned char *)rtl_uString_getStr( pText ); nSize = rtl_uString_getLength( pText ) * sizeof( sal_Unicode ); if ( !pData ) return NULL; digest = rtl_digest_create( rtl_Digest_AlgorithmMD5 ); if ( digest == 0 ) return NULL; md5_key_len = rtl_digest_queryLength( digest ); md5_buf = (sal_uInt8 *)calloc( md5_key_len, sizeof( sal_uInt8 ) ); rtl_digest_init( digest, pData , nSize ); rtl_digest_update( digest, pData, nSize ); rtl_digest_get( digest, md5_buf, md5_key_len ); rtl_digest_destroy( digest ); /* create hex-value string from the MD5 value to keep the string size minimal */ rtl_uString_new_WithLength( &pResult, nCapacity ); for ( ; i < md5_key_len; ++i ) { char val[3]; snprintf( val, 3, "%x", md5_buf[i] ); /* sic! we ignore some of the 0's */ rtl_uStringbuffer_insert_ascii( &pResult, &nCapacity, rtl_uString_getLength( pResult ), val, strlen( val ) ); } /* cleanup */ free( md5_buf ); return pResult; }
void exec_pagein (Args *args) { rtl_String * path = ustr_to_str(args->pAppPath); pagein_execute(rtl_string_getStr(path), "pagein-common"); if (args->pPageinType) { pagein_execute(rtl_string_getStr(path), args->pPageinType); } rtl_string_release(path); }
static void ustr_debug( const char *pMessage, rtl_uString *pStr ) { rtl_String *pOut = ustr_to_str( pStr ); fprintf( stderr, "%s: %s\n", pMessage, rtl_string_getStr( pOut ) ); rtl_string_release( pOut ); return; }