Ejemplo n.º 1
0
        public static TMoFile GetMoFile(string filename, TDebugLogger DebugLogger)
        {
            Int64 offset, size;

            // Find real filename
            offset = 0;
            size   = 0;
            string realfilename = filename;

            if (filename.StartsWith(basedirectory))
            {
                filename = filename.Substring(basedirectory.Length);
                int idx = filelist.IndexOf(filename);
                if (idx != -1)
                {
                    TEmbeddedFileInfo fi = (TEmbeddedFileInfo)filelist.Objects[idx];
                    realfilename = TGnuGettextInstance.ExecutableFilename;
                    offset       = fi.offset;
                    size         = fi.size;
#if DXGETTEXTDEBUG
                    DebugLogger("Instead of " + filename + ", using " + realfilename + " from offset " + (offset).ToString() + ", size " + (size).ToString());
#endif
                }
            }


#if DXGETTEXTDEBUG
            DebugLogger("Reading .mo data from file ''" + filename + "''");
#endif

            // Find TMoFile object
            TMoFile Result;
            MoFilesCS.AcquireWriterLock(Timeout.Infinite);
            try
            {
                string idxname = realfilename + " //\\ " + (offset).ToString();
                int    idx;
                if (MoFiles.Find(idxname, out idx))
                {
                    Result = (TMoFile)MoFiles.Objects[idx];
                }
                else
                {
                    Result = new TMoFile(realfilename, offset, size, TGnuGettextInstance.UseMemoryMappedFiles);
                    MoFiles.AddObject(idxname, Result);
                }
                Result.Users++;
            }
            finally
            {
                MoFilesCS.ReleaseWriterLock();
            }
            return(Result);
        }
Ejemplo n.º 2
0
        public static bool FileExists(string filename)
        {
            if (filename.StartsWith(basedirectory))
            {
                // Cut off basedirectory if the file is located beneath that base directory
                filename = filename.Substring(basedirectory.Length);
            }
            int idx;

            return(filelist.Find(filename, out idx));
        }