problem with mmap and cygwin 1.1.8

Turnbull Wallace Capt AFRL/VSBXR Wallace.Turnbull@hanscom.af.mil
Tue Apr 3 08:07:00 GMT 2001


Hello all. I tried posting this to the list yesterday and it showed up in
the cygwin list web archive but I received an email saying the message
bounced so I don't know if it really went to the list or not so I'm
reposting.  I apologize if you got two copies of this.

Hello all.  I've recently updated my system to cygwin 1.1.8 and gcc
2.95-3.2. I had been running cygwin 1.1.7 and gcc 2.95.2-6.  The following
code (which calls mmap) worked fine under 1.1.7 but now mmap fails with
errno = 13, "Permission denied."  (Actually, the strace shows:
"geterrno_from_win_error: unknown windows error 1006, setting errno to 13") 

I rolled back to the previous setup just to double check and the call to
mmap worked fine.  Attached is the broken code, some cygcheck output, and
strace output.  I'm running Windows 2000 Pro, SP1.  I did a diff on the
cygwin sources and noticed significant changes to mmap.cc between 1.1.7 and
1.1.8 but didn't I didn't delve very deep.  Any ideas?  

--Rhet

int create_files()
{
   int i;
   int fd;
   char *p;
   char fname[1024];
   long size;
   int perms;
  
   size = get_file_size();
   perms = 0666;
   
   for (i=0;i<NUMALTBINS;i++)
   {
      memset(fname,'\0',1024);
      sprintf(fname,"%s/csealt%02d.map",FILEPATH,i);
      printf("creating file %s with perms %03o\n",fname,perms);
      
      //create and open the file
      if ((fd = open(fname, O_RDWR | O_CREAT | O_TRUNC, perms)) < 0)
      {
         fprintf(stderr,"error creating file\n");     

         return -1;      
      }
              
      if ((p = mmap(0,(size_t) size, 
              PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, 0)) ==
(caddr_t) -1)
      {
         fprintf(stderr,"mmap returned error\n");
         #ifdef DEBUG
                 fprintf(stderr,"errno is %d, error is
%s\n",errno,strerror(errno));
         #endif
         return -1;
      }
     
      init_file(p);
      
      //unmap and close
      munmap(p,(size_t)size);
      
      close(fd);
   }
   return 0;
}
Here's my DLL info from cygcheck:
Cygwin DLL version info:
    dll major: 1001
    dll minor: 8
    dll epoch: 19
    dll bad signal mask: 19005
    dll old termios: 5
    dll malloc env: 28
    api major: 0
    api minor: 34
    shared data: 3
    dll identifier: cygwin1
    mount registry: 2
    cygnus registry name: Cygnus Solutions
    cygwin registry name: Cygwin
    program options name: Program Options
    cygwin mount registry name: mounts v2
    cygdrive flags: cygdrive flags
    cygdrive prefix: cygdrive prefix
    cygdrive default prefix:
    build date: Wed Jan 31 10:08:38 EST 2001
    shared id: cygwin1S3

Here's some strace output:

 100   49056 [main] cse_bin 1220 _open: open
(/home/rhet/csebin/test/csealt00.map, 0x602)
  113   49169 [main] cse_bin 1220 dtable::build_fhandler: some disk file -
cb 56, fd 3, fh 0x1A0205B0
  101   49270 [main] cse_bin 1220 fhandler_disk_file::open:
(/home/rhet/csebin/test/csealt00.map, 0x602)
  105   49375 [main] cse_bin 1220 mount_info::conv_to_win32_path:
conv_to_win32_path (/home/rhet/csebin/test/csealt00.map)
  104   49479 [main] cse_bin 1220 normalize_posix_path: src
/home/rhet/csebin/test/csealt00.map
  100   49579 [main] cse_bin 1220 normalize_posix_path:
/home/rhet/csebin/test/csealt00.map = normalize_posix_path
(/home/rhet/csebin/test/csealt00.map)
  106   49685 [main] cse_bin 1220 mount_info::conv_to_win32_path:
c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map(rel),
c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map(abs) 0xA(flags) =
conv_to_win32_path (/home/rhet/csebin/test/csealt00.map)
  275   49960 [main] cse_bin 1220 symlink_info::check: GetFileAttributesA
(c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map) failed
  126   50086 [main] cse_bin 1220 geterrno_from_win_error: windows error 2
== errno 2
  101   50187 [main] cse_bin 1220 symlink_info::check: 0 = symlink.check
(c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map, 0x244F319) (0xA)
  225   50412 [main] cse_bin 1220 symlink_info::check: not a symlink
  119   50531 [main] cse_bin 1220 symlink_info::check: 0 = symlink.check
(c:\Turnbull\cyghome\rhet\csebin\test, 0x244F319) (0x0)
  287   50818 [main] cse_bin 1220 path_conv::check:
GetVolumeInformation(c:\) = OK,
full_path(c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map),
set_has_acls(0)
  142   50960 [main] cse_bin 1220 fhandler_base::open:
(c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map, 0x602)
  286   51246 [main] cse_bin 1220 fhandler_base::open: 176 = CreateFileA
(c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map, 0xC0000000, 0x7,
0x6108517C, 0x2, 0x80, 0)
  159   51405 [main] cse_bin 1220 fhandler_base::open: filemode set to
binary
  110   51515 [main] cse_bin 1220 fhandler_base::open: 1 =
fhandler_base::open (c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map,
0x602)
  133   51648 [main] cse_bin 1220 fhandler_disk_file::open: 1 =
fhandler_disk_file::open (c:\Turnbull\cyghome\rhet\csebin\test\csealt00.map,
0x602)
  110   51758 [main] cse_bin 1220 _open: 3 = open
(/home/rhet/csebin/test/csealt00.map, 0x602)
  114   51872 [main] cse_bin 1220 mmap: addr 0, len 414489600, prot 3, flags
1, fd 3, off 0
  333   52205 [main] cse_bin 1220 seterrno_from_win_error:
/cygnus/netrel/src/cygwin-1.1.8-2/winsup/cygwin/mmap.cc:690 errno 1006
  110   52315 [main] cse_bin 1220 geterrno_from_win_error: unknown windows
error 1006, setting errno to 13
  102   52417 [main] cse_bin 1220 fhandler_disk_file::mmap: -1 = mmap():
CreateFileMapping failed with Win32 error 1006





--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list