This article was previously published under Q157714
This article has been archived. It is offered "as is" and will no longer be updated.
When files are added to Visual SourceSafe, the file names are "mangled" andplaced into the database. There is no documentation on how SourceSafe knowsto place files in the appropriate data sub-directory.
SourceSafe translates all files and projects into a corresponding"internal" file number. The name of the file, TBAAAAAA for instance,represents the actual file number.
How to Find File Number
SourceSafe uses base-26 math (left to right) to get the file number. Theletter maps to a number where A=0 and Z=25. Take the actual file name andbreak the letters down to a series of multiples using the base of 26. Forexample, the file number for TBAAAAAA may be found by:
T = 19 * 26^0 = 19 B = 1 * 26^1 = 26 A = 0 * 26^2 = 0 A = 0 * 26^3 = 0 A = 0 * 26^4 = 0 A = 0 * 26^5 = 0 A = 0 * 26^6 = 0 A = 0 * 26^7 = 0 TOTAL = 45
Therefore, the file number of TBAAAAAA is 45. By using a file number ratherthan a name, SourceSafe gains several advantages:
SourceSafe can store long filenames on 16-bit systems. Using the NAMES.DAT file, SourceSafe can take the long name and store it while a short name is generated for 16-bit platforms.
SourceSafe can distribute files among the data subdirectories equally. This prevents scenarios where, for example, the Z subdirectory holds 0% of the database files and the M directory holds 23% of the database files.
Hashing the filename adds to the security of the system by making the DATA directory a black box to users.
SourceSafe can handle cross-platform naming conventions. On UNIX, SourceSafe and SOURCESAFE are two different files, and on NT these are the same file. Hashing the name allows SourceSafe to store the file case independently of the server operating system.
How SourceSafe Finds Next File
In the DATA directory, there is a text file called AAAAAAAA.CNT. Thecontents of this file consist of the last filename that was added in thedatabase. When a new project or file is added, SourceSafe opens this fileand adds one (1) to the file number. This new file is then generated in theSourceSafe database. It is possible to put something like ZZZZZAAA in theAAAAAAAAA.CNT file. SourceSafe will add 1 to this file number and write thenew file in the database. If a user is unaware of this and continues to useSourceSafe and add files or projects, ANALYZE may not be able to run andthe database will not be able to be repaired. Because all read/write usersneed read/write access to this file, a malicious user can cause someserious database problems that may not be detected until it is too late.
If AAAAAAAA.CNT is Set Incorrectly
If the file in AAAAAAAA.CNT is incorrect, then SourceSafe will try the nextfile number until it is able to create the new file. Obviously, SourceSafewill be much slower when creating files or projects but there will be nodata loss. If the file is missing for some reason, create a newAAAAAAAA.CNT file and put AAAAAAAA as the only text in the file. SourceSafewill start writing files in the first available open file number.