diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2003-06-04 09:43:11 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2003-06-04 09:43:11 +0000 |
commit | 8d006f9ee4765cc573e655e336989071022aaf93 (patch) | |
tree | 582e734255353af97f2df26150795d3edef496d5 /desktop/source/pagein | |
parent | d71f3f23d9125e3d42461b3d66c9735386ccca4f (diff) |
INTEGRATION: CWS tune02 (1.1.2); FILE ADDED
2003/05/31 17:46:58 mhu 1.1.2.1: #109657# Command line utility to 'page-in' shared libraries needed at startup.
Diffstat (limited to 'desktop/source/pagein')
-rw-r--r-- | desktop/source/pagein/file_image.h | 112 | ||||
-rw-r--r-- | desktop/source/pagein/file_image_unx.c | 170 |
2 files changed, 282 insertions, 0 deletions
diff --git a/desktop/source/pagein/file_image.h b/desktop/source/pagein/file_image.h new file mode 100644 index 000000000000..869dc05df024 --- /dev/null +++ b/desktop/source/pagein/file_image.h @@ -0,0 +1,112 @@ +/************************************************************************* + * + * $RCSfile: file_image.h,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-06-04 10:43:03 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2002 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef INCLUDED_FILE_IMAGE_H +#define INCLUDED_FILE_IMAGE_H + +#ifndef INCLUDED_STDDEF_H +#include <stddef.h> +#define INCLUDED_STDDEF_H +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** file_image. + */ +struct file_image_st +{ + void * m_base; + size_t m_size; +}; + +typedef struct file_image_st file_image; + +#define FILE_IMAGE_INITIALIZER { 0, 0 } + + +/** file_image_open. + */ +int file_image_open ( + file_image * image, + const char * filename); + + +/** file_image_pagein. + */ +int file_image_pagein ( + file_image * image); + + +/** file_image_close. + */ +int file_image_close ( + file_image * image); + + +/** Epilog. + */ +#ifdef __cplusplus +} +#endif + +#endif /* INCLUDED_ODEP_IMAGE_H */ diff --git a/desktop/source/pagein/file_image_unx.c b/desktop/source/pagein/file_image_unx.c new file mode 100644 index 000000000000..f77bb4db7364 --- /dev/null +++ b/desktop/source/pagein/file_image_unx.c @@ -0,0 +1,170 @@ +/************************************************************************* + * + * $RCSfile: file_image_unx.c,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2003-06-04 10:43:11 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2002 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include "file_image.h" + +#include <unistd.h> + +#include <errno.h> +#include <fcntl.h> + +#if defined(LINUX) +#define __USE_BSD /* madvise, MADV_WILLNEED */ +#endif /* Linux */ + +#include <sys/mman.h> +#include <sys/stat.h> + +#include <string.h> + +/* + * file_image_open + */ +int file_image_open (file_image * image, const char * filename) +{ + int result = 0; + int fd; + struct stat st; + void * p; + + if (image == 0) + return (EINVAL); + + image->m_base = MAP_FAILED, image->m_size = 0; + + if ((fd = open (filename, O_RDONLY)) == -1) + return (errno); + + if (fstat (fd, &st) == -1) + { + result = errno; + goto cleanup_and_leave; + } + + p = mmap (0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + if (p == MAP_FAILED) + { + result = errno; + goto cleanup_and_leave; + } + + image->m_base = p, image->m_size = st.st_size; + +cleanup_and_leave: + close (fd); + return (result); +} + +/* + * file_image_pagein. + */ +int file_image_pagein (file_image * image) +{ + file_image w; + long s; + size_t k; + volatile char c = 0; + + if (image == 0) + return (EINVAL); + + if ((w.m_base = image->m_base) == 0) + return (EINVAL); + if ((w.m_size = image->m_size) == 0) + return (0); + + if (madvise (w.m_base, w.m_size, MADV_WILLNEED) == -1) + return (errno); + + if ((s = sysconf (_SC_PAGESIZE)) == -1) + s = 0x1000; + + k = (size_t)(s); + while (w.m_size > k) + { + c ^= ((char*)(w.m_base))[0]; + w.m_base = (char*)(w.m_base) + k; + w.m_size -= k; + } + if (w.m_size > 0) + { + c ^= ((char*)(w.m_base))[0]; + w.m_base = (char*)(w.m_base) + w.m_size; + w.m_size -= w.m_size; + } + + return (0); +} + +/* + * file_image_close + */ +int file_image_close (file_image * image) +{ + if (image == 0) + return (EINVAL); + + if (munmap (image->m_base, image->m_size) == -1) + return (errno); + + image->m_base = 0, image->m_size = 0; + return (0); +} |