1 /*
2  * Copyright (c) 2017, NVIDIA CORPORATION.  All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17 
18 /* clang-format off */
19 
20 /*	perror3f.c - Implements LIB3F perror subprogram.  */
21 
22 /* must include ent3f.h AFTER io3f.h */
23 #include "io3f.h"
24 #include "ent3f.h"
25 
26 #if !defined(WIN64) && !defined(WIN32)
27 extern char *strerror(); /* SVR4 only ? */
28 #endif
29 extern FILE *__getfile3f();
30 
ENT3F(PERROR,perror)31 void ENT3F(PERROR, perror)(DCHAR(str) DCLEN(str))
32 {
33   FILE *fp;
34   char *p;
35   char *str = CADR(str);
36   int str_l = CLEN(str);
37 
38   p = strerror(__io_errno());
39   fp = __getfile3f(0);
40   if (str_l > 0) {
41     do {
42       fputc((int)*str, fp);
43       str++;
44     } while (--str_l > 0);
45     fputc(':', fp);
46     fputc(' ', fp);
47   }
48   fprintf(fp, "%s", p);
49   if (__PC_DOS)
50     fputc('\r', fp);
51   fputc('\n', fp);
52 
53   return;
54 }
55