1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements. See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "apr_general.h"
19 #include "apr_errno.h"
21 #include "apr_strings.h"
22 #include "apr_portable.h"
29 APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m,
35 apr_shm_t *newm = (apr_shm_t *)apr_palloc(pool, sizeof(apr_shm_t));
37 ULONG flags = PAG_COMMIT|PAG_READ|PAG_WRITE;
42 name = apr_pstrcat(pool, "\\SHAREMEM\\", filename, NULL);
46 flags |= OBJ_GETTABLE;
49 rc = DosAllocSharedMem(&(newm->memblock), name, reqsize, flags);
52 return APR_OS2_STATUS(rc);
59 APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shm_t *m)
61 DosFreeMem(m->memblock);
65 APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m,
70 apr_shm_t *newm = (apr_shm_t *)apr_palloc(pool, sizeof(apr_shm_t));
72 ULONG flags = PAG_READ|PAG_WRITE;
75 name = apr_pstrcat(pool, "\\SHAREMEM\\", filename, NULL);
77 rc = DosGetNamedSharedMem(&(newm->memblock), name, flags);
80 return APR_FROM_OS_ERROR(rc);
87 APR_DECLARE(apr_status_t) apr_shm_detach(apr_shm_t *m)
92 rc = DosFreeMem(m->memblock);
95 return APR_FROM_OS_ERROR(rc);
98 APR_DECLARE(void *) apr_shm_baseaddr_get(const apr_shm_t *m)
103 APR_DECLARE(apr_size_t) apr_shm_size_get(const apr_shm_t *m)
105 ULONG flags, size = 0x1000000;
106 DosQueryMem(m->memblock, &size, &flags);
110 APR_POOL_IMPLEMENT_ACCESSOR(shm)
112 APR_DECLARE(apr_status_t) apr_os_shm_get(apr_os_shm_t *osshm,
115 *osshm = shm->memblock;
119 APR_DECLARE(apr_status_t) apr_os_shm_put(apr_shm_t **m,
124 apr_shm_t *newm = (apr_shm_t *)apr_palloc(pool, sizeof(apr_shm_t));
125 ULONG flags = PAG_COMMIT|PAG_READ|PAG_WRITE;
129 rc = DosGetSharedMem(&(newm->memblock), flags);
132 return APR_FROM_OS_ERROR(rc);