Bug 1792034 [wpt PR 36019] - Make location.search always expect UTF-8, a=testonly
[gecko.git] / nsprpub / pr / src / misc / pripc.c
blob64415dd63112d12488d81aaf2182e7e495904ee4
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 /*
7 * File: pripc.c
9 * Description: functions for IPC support
12 #include "primpl.h"
14 #include <string.h>
17 * A POSIX IPC name must begin with a '/'.
18 * A POSIX IPC name on Solaris cannot contain any '/' except
19 * the required leading '/'.
20 * A POSIX IPC name on HP-UX must be a valid pathname
21 * in the file system.
23 * The ftok() function for System V IPC requires a valid pathname
24 * in the file system.
26 * A Win32 IPC name cannot contain '\'.
29 static void _pr_ConvertSemName(char *result)
31 #ifdef _PR_HAVE_POSIX_SEMAPHORES
32 #if defined(SOLARIS)
33 char *p;
35 /* Convert '/' to '_' except for the leading '/' */
36 for (p = result+1; *p; p++) {
37 if (*p == '/') {
38 *p = '_';
41 return;
42 #else
43 return;
44 #endif
45 #elif defined(_PR_HAVE_SYSV_SEMAPHORES)
46 return;
47 #elif defined(WIN32)
48 return;
49 #endif
52 static void _pr_ConvertShmName(char *result)
54 #if defined(PR_HAVE_POSIX_NAMED_SHARED_MEMORY)
55 #if defined(SOLARIS)
56 char *p;
58 /* Convert '/' to '_' except for the leading '/' */
59 for (p = result+1; *p; p++) {
60 if (*p == '/') {
61 *p = '_';
64 return;
65 #else
66 return;
67 #endif
68 #elif defined(PR_HAVE_SYSV_NAMED_SHARED_MEMORY)
69 return;
70 #elif defined(WIN32)
71 return;
72 #else
73 return;
74 #endif
77 PRStatus _PR_MakeNativeIPCName(
78 const char *name,
79 char *result,
80 PRIntn size,
81 _PRIPCType type)
83 if (strlen(name) >= (PRSize)size) {
84 PR_SetError(PR_BUFFER_OVERFLOW_ERROR, 0);
85 return PR_FAILURE;
87 strcpy(result, name);
88 switch (type) {
89 case _PRIPCSem:
90 _pr_ConvertSemName(result);
91 break;
92 case _PRIPCShm:
93 _pr_ConvertShmName(result);
94 break;
95 default:
96 PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
97 return PR_FAILURE;
99 return PR_SUCCESS;