/* main */ int main (int argc, char ** argv) { if (argc > 1) { oslFileError result; oslFileHandle hFile = 0; rtl_uString * pSystemPath = 0; rtl_uString * pFileUrl = 0; rtl_uString_newFromAscii (&pSystemPath, argv[1]); result = osl_getFileURLFromSystemPath (pSystemPath, &pFileUrl); rtl_uString_release (pSystemPath), pSystemPath = 0; if (result != osl_File_E_None) return (result); result = osl_openFile (pFileUrl, &hFile, osl_File_OpenFlag_Read); rtl_uString_release (pFileUrl), pFileUrl = 0; if (result == osl_File_E_None) { sal_Sequence * pBuffer = 0; for ( ;; ) { sal_Int32 i, n; result = osl_readLine (hFile, &pBuffer); if (result != osl_File_E_None) break; for (i = 0, n = pBuffer->nElements; i < n; i++) printf ("%c", (char)(pBuffer->elements[i])); printf("\n"); } rtl_byte_sequence_release (pBuffer), pBuffer = 0; (void) osl_closeFile (hFile); } } return 0; }
static void exec_javaldx (Args *args) { char newpath[4096]; sal_uInt32 nArgs; rtl_uString *pApp; rtl_uString **ppArgs; rtl_uString *pTmp, *pTmp2; oslProcess javaldx = NULL; oslFileHandle fileOut= NULL; oslProcessError err; ppArgs = (rtl_uString **)calloc( args->nArgsEnv + 2, sizeof( rtl_uString* ) ); for ( nArgs = 0; nArgs < args->nArgsEnv; ++nArgs ) ppArgs[nArgs] = args->ppArgs[nArgs]; /* Use absolute path to redirectrc */ pTmp = NULL; rtl_uString_newFromAscii( &pTmp, "-env:INIFILENAME=vnd.sun.star.pathname:" ); rtl_uString_newConcat( &pTmp, pTmp, args->pAppPath ); pTmp2 = NULL; rtl_uString_newFromAscii( &pTmp2, "redirectrc" ); rtl_uString_newConcat( &pTmp, pTmp, pTmp2 ); ppArgs[nArgs] = pTmp; rtl_uString_release (pTmp2); nArgs++; /* And also to javaldx */ pApp = NULL; rtl_uString_newFromAscii( &pApp, "file://" ); rtl_uString_newConcat( &pApp, pApp, args->pAppPath ); pTmp = NULL; rtl_uString_newFromAscii( &pTmp, "javaldx" ); rtl_uString_newConcat( &pApp, pApp, pTmp ); rtl_uString_release( pTmp ); err = osl_executeProcess_WithRedirectedIO( pApp, ppArgs, nArgs, osl_Process_NORMAL, NULL, // security NULL, // work dir NULL, 0, &javaldx, // process handle NULL, &fileOut, NULL); rtl_uString_release( ppArgs[nArgs-1] ); rtl_uString_release( pApp ); free( ppArgs ); if( err != osl_Process_E_None) { fprintf (stderr, "Warning: failed to launch javaldx - java may not function correctly\n"); if (javaldx) osl_freeProcessHandle(javaldx); if (fileOut) osl_closeFile(fileOut); return; } else { char *chomp; sal_uInt64 bytes_read; /* Magically osl_readLine doesn't work with pipes with E_SPIPE - so be this lame instead: */ while (osl_readFile (fileOut, newpath, SAL_N_ELEMENTS (newpath), &bytes_read) == osl_File_E_INTR); if (bytes_read <= 0) { fprintf (stderr, "Warning: failed to read path from javaldx\n"); if (javaldx) osl_freeProcessHandle(javaldx); if (fileOut) osl_closeFile(fileOut); return; } newpath[bytes_read] = '\0'; if ((chomp = strstr (newpath, "\n"))) *chomp = '\0'; } extend_library_path (newpath); if (javaldx) osl_freeProcessHandle(javaldx); if (fileOut) osl_closeFile(fileOut); }
oslFileError SAL_CALL osl_createTempFile( rtl_uString* pustrDirectoryURL, oslFileHandle* pHandle, rtl_uString** ppustrTempFileURL) { rtl_uString* base_directory = 0; rtl_uString* temp_file_name = 0; oslFileHandle temp_file_handle; sal_Bool b_delete_on_close; oslFileError osl_error; osl_error = osl_setup_createTempFile_impl_( pustrDirectoryURL, pHandle, ppustrTempFileURL, &base_directory, &b_delete_on_close); if (osl_File_E_None != osl_error) return osl_error; osl_error = osl_create_temp_file_impl_( base_directory, &temp_file_handle, &temp_file_name); if (osl_File_E_None == osl_error) { rtl_uString* temp_file_url = 0; /* assuming this works */ osl_getFileURLFromSystemPath(temp_file_name, &temp_file_url); if (b_delete_on_close) { osl_error = osl_removeFile(temp_file_url); if (osl_File_E_None == osl_error) *pHandle = temp_file_handle; else osl_closeFile(temp_file_handle); } else { if (pHandle) *pHandle = temp_file_handle; else osl_closeFile(temp_file_handle); rtl_uString_assign(ppustrTempFileURL, temp_file_url); } if (temp_file_url) rtl_uString_release(temp_file_url); if (temp_file_name) rtl_uString_release(temp_file_name); } if (base_directory) rtl_uString_release(base_directory); return osl_error; }