File: | jdk/src/jdk.jdwp.agent/unix/native/libjdwp/exec_md.c |
Warning: | line 107, column 15 Null pointer passed to 1st parameter expecting 'nonnull' |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* | |||
2 | * Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved. | |||
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |||
4 | * | |||
5 | * This code is free software; you can redistribute it and/or modify it | |||
6 | * under the terms of the GNU General Public License version 2 only, as | |||
7 | * published by the Free Software Foundation. Oracle designates this | |||
8 | * particular file as subject to the "Classpath" exception as provided | |||
9 | * by Oracle in the LICENSE file that accompanied this code. | |||
10 | * | |||
11 | * This code is distributed in the hope that it will be useful, but WITHOUT | |||
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |||
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |||
14 | * version 2 for more details (a copy is included in the LICENSE file that | |||
15 | * accompanied this code). | |||
16 | * | |||
17 | * You should have received a copy of the GNU General Public License version | |||
18 | * 2 along with this work; if not, write to the Free Software Foundation, | |||
19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |||
20 | * | |||
21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |||
22 | * or visit www.oracle.com if you need additional information or have any | |||
23 | * questions. | |||
24 | */ | |||
25 | ||||
26 | #include <stdlib.h> | |||
27 | #include <unistd.h> | |||
28 | #include <string.h> | |||
29 | #include <ctype.h> | |||
30 | #include "sys.h" | |||
31 | #include "util.h" | |||
32 | ||||
33 | static char *skipWhitespace(char *p) { | |||
34 | while ((*p != '\0') && isspace(*p)((*__ctype_b_loc ())[(int) ((*p))] & (unsigned short int) _ISspace)) { | |||
35 | p++; | |||
36 | } | |||
37 | return p; | |||
38 | } | |||
39 | ||||
40 | static char *skipNonWhitespace(char *p) { | |||
41 | while ((*p != '\0') && !isspace(*p)((*__ctype_b_loc ())[(int) ((*p))] & (unsigned short int) _ISspace)) { | |||
42 | p++; | |||
43 | } | |||
44 | return p; | |||
45 | } | |||
46 | ||||
47 | int | |||
48 | dbgsysExec(char *cmdLine) | |||
49 | { | |||
50 | int i; | |||
51 | int argc; | |||
52 | pid_t pid_err = (pid_t)(-1); /* this is the error return value */ | |||
53 | pid_t pid; | |||
54 | char **argv = NULL((void*)0); | |||
55 | char *p; | |||
56 | char *args; | |||
57 | ||||
58 | /* Skip leading whitespace */ | |||
59 | cmdLine = skipWhitespace(cmdLine); | |||
60 | ||||
61 | /*LINTED*/ | |||
62 | args = jvmtiAllocate((jint)strlen(cmdLine)+1); | |||
63 | if (args == NULL((void*)0)) { | |||
| ||||
64 | return SYS_NOMEM-5; | |||
65 | } | |||
66 | (void)strcpy(args, cmdLine); | |||
67 | ||||
68 | p = args; | |||
69 | ||||
70 | argc = 0; | |||
71 | while (*p != '\0') { | |||
72 | p = skipNonWhitespace(p); | |||
73 | argc++; | |||
74 | if (*p == '\0') { | |||
75 | break; | |||
76 | } | |||
77 | p = skipWhitespace(p); | |||
78 | } | |||
79 | ||||
80 | /*LINTED*/ | |||
81 | argv = jvmtiAllocate((argc + 1) * (jint)sizeof(char *)); | |||
82 | if (argv == 0) { | |||
83 | jvmtiDeallocate(args); | |||
84 | return SYS_NOMEM-5; | |||
85 | } | |||
86 | ||||
87 | for (i = 0, p = args; i < argc; i++) { | |||
88 | argv[i] = p; | |||
89 | p = skipNonWhitespace(p); | |||
90 | *p++ = '\0'; | |||
91 | p = skipWhitespace(p); | |||
92 | } | |||
93 | argv[i] = NULL((void*)0); /* NULL terminate */ | |||
94 | ||||
95 | if ((pid = fork()) == 0) { | |||
96 | /* Child process */ | |||
97 | int i; | |||
98 | long max_fd; | |||
99 | ||||
100 | /* close everything */ | |||
101 | max_fd = sysconf(_SC_OPEN_MAX_SC_OPEN_MAX); | |||
102 | /*LINTED*/ | |||
103 | for (i = 3; i < (int)max_fd; i++) { | |||
104 | (void)close(i); | |||
105 | } | |||
106 | ||||
107 | (void)execvp(argv[0], argv); | |||
| ||||
108 | ||||
109 | exit(-1); | |||
110 | } | |||
111 | jvmtiDeallocate(args); | |||
112 | jvmtiDeallocate(argv); | |||
113 | if (pid == pid_err) { | |||
114 | return SYS_ERR-1; | |||
115 | } else { | |||
116 | return SYS_OK0; | |||
117 | } | |||
118 | } |