VirtualBox

Changeset 2861 in kBuild for trunk/src/kmk/incdep.c


Ignore:
Timestamp:
Sep 1, 2016 10:42:55 PM (8 years ago)
Author:
bird
Message:

Updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/incdep.c

    r2850 r2861  
    3232# define INCL_ERRORS
    3333#endif
     34#ifdef KBUILD_OS_WINDOWS
     35# ifdef KMK
     36#  define INCDEP_USE_KFSCACHE
     37# endif
     38#endif
    3439
    3540#include "make.h"
     
    6368# include <Windows.h>
    6469# define PARSE_IN_WORKER
     70#endif
     71
     72#ifdef INCDEP_USE_KFSCACHE
     73# include "nt/kFsCache.h"
     74extern PKFSCACHE g_pFsCache; /* dir-nt-bird.c for now */
    6575#endif
    6676
     
    146156  struct incdep_recorded_file *recorded_file_tail;
    147157#endif
    148 
     158#ifdef INCDEP_USE_KFSCACHE
     159  /** Pointer to the fs cache object for this file (it exists and is a file). */
     160  PKFSOBJ pFileObj;
     161#else
    149162  char name[1];
     163#endif
    150164};
    151165
     
    484498incdep_read_file (struct incdep *cur, struct floc *f)
    485499{
     500#ifdef INCDEP_USE_KFSCACHE
     501  size_t const cbFile = (size_t)cur->pFileObj->Stats.st_size;
     502
     503  assert(cur->pFileObj->fFlags);
     504  cur->file_base = incdep_xmalloc (cur, cbFile + 1);
     505  if (cur->file_base)
     506    {
     507      if (kFsCacheFileSimpleOpenReadClose (g_pFsCache, cur->pFileObj, 0, cur->file_base, cbFile))
     508        {
     509          cur->file_end = cur->file_base + cbFile;
     510          cur->file_base[cbFile] = '\0';
     511          return 0;
     512        }
     513      incdep_xfree (cur, cur->file_base);
     514    }
     515  error (f, "%s/%s: error reading file", cur->pFileObj->pParent->Obj.pszName, cur->pFileObj->pszName);
     516
     517#else /* !INCDEP_USE_KFSCACHE */
    486518  int fd;
    487519  struct stat st;
     
    526558
    527559  close (fd);
     560#endif /* !INCDEP_USE_KFSCACHE */
    528561  cur->file_base = cur->file_end = NULL;
    529562  return -1;
     
    541574
    542575  incdep_xfree (cur, cur->file_base);
     576#ifdef INCDEP_USE_KFSCACHE
     577  /** @todo release object ref some day... */
     578#endif
    543579  cur->next = NULL;
    544580  free (cur);
     
    890926
    891927  if (cur->err_msg)
     928#ifdef INCDEP_USE_KFSCACHE
     929    error(NILF, "%s/%s(%d): %s", cur->pFileObj->pParent->Obj.pszName, cur->pFileObj->pszName, cur->err_line_no, cur->err_msg);
     930#else
    892931    error(NILF, "%s(%d): %s", cur->name, cur->err_line_no, cur->err_msg);
     932#endif
    893933
    894934
     
    9671007{
    9681008  if (cur->worker_tid == -1)
     1009#ifdef INCDEP_USE_KFSCACHE
     1010    error (NILF, "%s/%s(%d): %s", cur->pFileObj->pParent->Obj.pszName, cur->pFileObj->pszName, line_no, msg);
     1011#else
    9691012    error (NILF, "%s(%d): %s", cur->name, line_no, msg);
     1013#endif
    9701014#ifdef PARSE_IN_WORKER
    9711015  else
     
    17541798  while ((name = find_next_token (&names_iterator, &name_len)) != 0)
    17551799    {
     1800#ifdef INCDEP_USE_KFSCACHE
     1801       KFSLOOKUPERROR enmError;
     1802       PKFSOBJ pFileObj = kFsCacheLookupWithLengthA (g_pFsCache, name, name_len, &enmError);
     1803       if (!pFileObj)
     1804         continue;
     1805       if (pFileObj->bObjType != KFSOBJ_TYPE_FILE)
     1806         {
     1807           kFsCacheObjRelease (g_pFsCache, pFileObj);
     1808           continue;
     1809         }
     1810
     1811       cur = xmalloc (sizeof (*cur));            /* not incdep_xmalloc here */
     1812       cur->pFileObj = pFileObj;
     1813#else
    17561814       cur = xmalloc (sizeof (*cur) + name_len); /* not incdep_xmalloc here */
    1757        cur->file_base = cur->file_end = NULL;
    17581815       memcpy (cur->name, name, name_len);
    17591816       cur->name[name_len] = '\0';
     1817#endif
     1818
     1819       cur->file_base = cur->file_end = NULL;
    17601820       cur->worker_tid = -1;
    17611821#ifdef PARSE_IN_WORKER
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette