X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: "Wiktor S. (wswiktorSP AT Mpoczta DOT fm) [via djgpp AT delorie DOT com]" Newsgroups: comp.os.msdos.djgpp Subject: Re: how to unlock locked memory Date: Wed, 16 Mar 2016 15:15:30 +0100 Organization: INTERIA.PL S.A. Lines: 57 Message-ID: References: <20160316000317 DOT 329b9cf8 AT _> <56E949FA DOT 2070703 AT yahoo DOT no> NNTP-Posting-Host: user-164-127-34-93.play-internet.pl Mime-Version: 1.0 Content-Type: text/plain; format=flowed; charset="UTF-8"; reply-type=original Content-Transfer-Encoding: 7bit X-Trace: usenet.news.interia.pl 1458137731 31495 164.127.34.93 (16 Mar 2016 14:15:31 GMT) X-Complaints-To: usenet AT firma DOT interia DOT pl NNTP-Posting-Date: Wed, 16 Mar 2016 14:15:31 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 Bytes: 2518 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com >> Thanks. Weird that there is no _go32_dpmi_unlock_code/data. > You can use '__dpmi_unlock_linear_region()'. Yes, I've modified _go32_dpmi_lock_data to use unlock_linear_region, like this: ============== int _go32_dpmi_unlock_data( void *lockaddr, unsigned long locksize ) { unsigned long baseaddr; __dpmi_meminfo memregion; if( __dpmi_get_segment_base_address( _go32_my_ds(), &baseaddr) == -1 ) return( -1 ); memset( &memregion, 0, sizeof(memregion) ); memregion.address = baseaddr + (unsigned long) lockaddr; memregion.size = locksize; if( __dpmi_unlock_linear_region( &memregion ) == -1 ) return( -1 ); return( 0 ); } int _go32_dpmi_unlock_code( void *lockaddr, unsigned long locksize ) { unsigned long baseaddr; __dpmi_meminfo memregion; if( __dpmi_get_segment_base_address( _go32_my_cs(), &baseaddr) == -1 ) return( -1 ); memset( &memregion, 0, sizeof(memregion) ); memregion.address = baseaddr + (unsigned long) lockaddr; memregion.size = locksize; if( __dpmi_unlock_linear_region( &memregion ) == -1 ) return( -1 ); return( 0 ); } ============== Seems to work, but it's a bit inconvenient because the project is in Ada, and this is now the only .c file. Any reason why it's not in libc? -- Wiktor S.