blob: 911bde060fa4c1508d035aa0c926fb7a16fcc794 [file]
>>PUSH SOURCE FORMAT
>>SOURCE FIXED
* Copyright (c) 2021-2026 Symas Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the Symas Corporation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
COPY "cblproto.cpy".
COPY posix-open.
COPY psx-open.
IDENTIFICATION DIVISION.
PROGRAM-ID. CBL_CREATE_FILE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. Posix
>>IF DEBUGGING-MODE IS Defined
With Debugging Mode
>>END-IF
.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 func-ret Binary-Long.
77 errno-val Binary-Long.
77 lk-mode PIC 9(8) COMP-5.
77 filename-len PIC 9(4) BINARY VALUE ZERO.
01 ws-access-mode PIC 9(8) COMP-5.
LINKAGE SECTION.
77 RETCODE PIC X(2) COMP-5.
01 filename PIC X ANY LENGTH.
01 access-mode PIC x COMP-x.
01 deny-mode PIC x comp-x. *> Not supported (must be 0).
01 device PIC x comp-x. *> Not supported (must be 0).
01 file-handle PIC X(4) COMP-5.
PROCEDURE DIVISION USING filename,
By Reference access-mode,
By Reference deny-mode,
By Reference device,
By Reference file-handle
RETURNING RETCODE.
MOVE access-mode TO ws-access-mode.
IF ws-access-mode >= 64
SUBTRACT 64 FROM ws-access-mode *> Remove large file bit if set
END-IF.
COMPUTE filename-len =
FUNCTION LENGTH(FUNCTION TRIM(filename)).
MOVE X"00" TO filename(filename-len + 1:1).
D Display 'CBL_CREATE_FILE: filename: [' filename ']'
D Display 'ws-access-mode: ' ws-access-mode ', '
D Display 'deny-mode: ' deny-mode.
EVALUATE ws-access-mode
WHEN 1 *> Read only
Move O_RDONLY to ws-access-mode
WHEN 2 *> Write only (deny-mode must be 0)
Move O_WRONLY to ws-access-mode
WHEN 3 *> Read/write
Move O_RDWR to ws-access-mode
WHEN OTHER
Display 'CBL_CREATE_FILE invalid mode: ' ws-access-mode
Move -1 to RETCODE
GOBACK
END-EVALUATE.
* TODO: Validate these settings:
Compute ws-access-mode = ws-access-mode + O_CREAT + O_TRUNC.
Compute Lk-mode = S_IRUSR + S_IWUSR + S_IRGRP + S_IWGRP.
MOVE FUNCTION posix-open(filename, ws-access-mode, lk-mode)
TO func-ret.
If func-ret is < 0
Then
Move Function COBRT-FILE-STATUS() to RETCODE
D Display 'COBRT-FILE-STATUS returned: ' RETCODE
else
Move func-ret to file-handle
Move 0 to RETCODE
end-if.
END PROGRAM CBL_CREATE_FILE.
>> POP SOURCE FORMAT