Mail Archives: cygwin-developers/1998/06/28/03:18:08
Hi!
fhandler_disk_file::open() contains the following code:
  if ((os_being_run != winNT) && (!real_path.exec_p))
    {
    DWORD done;
    char magic[2];
    /* FIXME should we use /etc/magic ? */
    magic[0] = magic[1] = magic[2] = '\0';
    ReadFile (get_handle (), magic, 3, &done, 0);
    if (magic[0] == ':' && magic[1] == '\n')
        real_path.exec_p = 1;
    if (magic[0] == '#' && magic[1] == '!')
        real_path.exec_p = 1;
    if (flags & O_APPEND)
      SetFilePointer (get_handle(), 0, 0, FILE_END);
    else
      SetFilePointer (get_handle(), 0, 0, FILE_BEGIN);
    }
The code seems to me buggy! Why we do not check file magic and do not set file pointer on NT? Shouldn't the code be something like:
  if (!real_path.exec_p)
    {
    DWORD done;
    char magic[2];
    /* FIXME should we use /etc/magic ? */
    magic[0] = magic[1] = magic[2] = '\0';
    ReadFile (get_handle (), magic, 3, &done, 0);
    if (magic[0] == ':' && magic[1] == '\n')
        real_path.exec_p = 1;
    if (magic[0] == '#' && magic[1] == '!')
        real_path.exec_p = 1;
    }
  if (flags & O_APPEND)
    SetFilePointer (get_handle(), 0, 0, FILE_END);
  else
    SetFilePointer (get_handle(), 0, 0, FILE_BEGIN);
-- 
Sergey Okhapkin, http://www.lexa.ru/sos
Moscow, Russia
- Raw text -