Re: IFS_UNLINK production readiness
cesco via RPG400-L <[email protected]> Wed, 22 Jul 2026 08:35:30 +0000 (UTC)
| Newsgroups | gmane.comp.lang.as400.rpg |
|---|---|
| Message-ID | <[email protected]> |
Sure, done, https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-4997 btw, even IBM states, to the previous users requesting the functionality, the the functionality is "delivered" and that contradicts in a sense the "example" nature of such artifact tbh... On Tuesday, July 21, 2026 at 09:24:35 PM GMT+2, Vern Hamberg via RPG400-L <[email protected]> wrote: I agree - and perhaps you can submit an idea - that will help it have a better chance to be included in a TR. *Regards* *Vern Hamberg* IBM Champion 2025 <cid:[email protected]> CAAC (COMMON Americas Advisory Council) IBM Influencer 2023 On 7/21/2026 11:39 AM, cesco via RPG400-L wrote: > Agreed, but I see many tutorial and example source codes around using it and incorporating it... > There is indeed a case for such basic primitives to be included as first citizens .... maybe in the next TRs let's see .. (i.e. to use them compose properly with other SQL functions returning the path in the correct format...). > my 2c > > > > > > > On Tuesday, July 21, 2026 at 06:06:01 PM GMT+2, Vern Hamberg via RPG400-L<[email protected]> wrote: > > > > > > Francesco > > You ask why IBM hasn't provided *...full compatibility and > symmetry...* - the examples in SYSTOOLS are just that - examples. They > are there for us to learn from and to expand upon, as you have done > > *Regards* > > *Vern Hamberg* > > IBM Champion 2025<cid:[email protected]> CAAC > (COMMON Americas Advisory Council) IBM Influencer 2023 > > > On 7/21/2026 10:15 AM, cesco via RPG400-L wrote: >> I've fashioned a quick PHP running on the ibmi to let the user interact with only its own profile home directory fast, to ease some transfer and for quick automation and avoid opening more complex protocols, all done via SQL interface (in order to run all operation with the correct user authority). >> I quickly noticed that , while other "IFS" sql functions are in Q* libs, IFS_UNLINK is meant as example per doc and it is in fact in SYSTOOLS; >> the problem that its implementation can bite you when operating with files in IFS that usually can contain unicode in the names... and compared to other functions is asymmetric because it forces ccsid job default (while the other IBM production functions are properly specified as ccsid 1200 in the parameter) >> Also IFS_RENAME seems limited... am I missing something, shouldn't IBM provide those primitives with full compatibility and symmetry? >> In any case, using the same way of C embedding of the stock function, I've introduced a custom function like below, in case someone hit the problem (hoping that IBM will promote those to full production in future), below as reference >> >> ciao, FrancescoT. >> >> >> CREATE OR REPLACE FUNCTION THELIB.IFS_UNLINK_UTF8 ( >> PATH_UTF8 VARCHAR(5000) CCSID 1208 ) >> RETURNS INTEGER >> LANGUAGE SQL >> SPECIFIC IFSUNLKUTF >> NOT DETERMINISTIC >> MODIFIES SQL DATA >> RETURNS NULL ON NULL INPUT >> NOT FENCED >> SET OPTION BINDOPT = 'BNDSRVPGM(QSYS/QP0LLIB1)' , >> COMMIT = *NONE , >> DFTRDBCOL = QSYS2 , >> DYNUSRPRF = *USER , >> SRTSEQ = *HEX >> MAIN : BEGIN >> --CALL QSYS2.QCMDEXC('CRTSRCPF FILE(QTEMP/QCSRC) RCDLEN(160) MBR(*NONE)'); >> --CALL QSYS2.QCMDEXC('ADDPFM FILE(QTEMP/QCSRC) MBR(IFSUNLK8) SRCTYPE(C)'); >> --INSERT INTO QTEMP.QCSRC (SRCSEQ, SRCDTA) VALUES >> -- ( 1, '{'), >> -- ( 2, '#include <qlg.h>'), >> -- ( 3, '#include <Qp0lstdi.h>'), >> -- ( 4, '#include <errno.h>'), >> -- ( 5, '#include <string.h>'), >> -- ( 6, 'struct pns_s {'), >> -- ( 7, ' Qlg_Path_Name_T hdr;'), >> -- ( 8, ' char name[5000];'), >> -- ( 9, '};'), >> -- (10, 'struct pns_s pns;'), >> -- (11, 'unsigned int len;'), >> -- (12, 'len = IFS_UNLINK_UTF8.PATH_UTF8.LEN;'), >> -- (13, 'if (len > sizeof(pns.name)) len = sizeof(pns.name);'), >> -- (14, 'memset(&pns, 0, sizeof(pns));'), >> -- (15, 'pns.hdr.CCSID = 1208;'), >> -- (16, 'pns.hdr.Path_Type = 0;'), >> -- (17, 'pns.hdr.Path_Length = len;'), >> -- (18, 'pns.hdr.Path_Name_Delimiter[0] = 0x2F;'), >> -- (19, 'memcpy(pns.name, IFS_UNLINK_UTF8.PATH_UTF8.DAT, len);'), >> -- (20, 'MAIN.RC = QlgUnlink((Qlg_Path_Name_T *)&pns);'), >> -- (21, 'if (MAIN.RC != 0) { MAIN.RC = errno; }'), >> -- (22, '}'); >> DECLARE RC INT DEFAULT 0 ; >> INCLUDE QTEMP / QCSRC ( IFSUNLK8 ) ; >> RETURN RC ; >> END ; -- This is the RPG programming on IBM i (RPG400-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l. Please contact support-FMtJrHiV//lnDLsaKlm4mFaTQe2KTcn/@public.gmane.org for any subscription related questions. -- This is the RPG programming on IBM i (RPG400-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l. Please contact support-FMtJrHiV//lnDLsaKlm4mFaTQe2KTcn/@public.gmane.org for any subscription related questions.