#include #include static int read_ss(char *filename); static void showusage(); int main(int args, char *argv[]) { char *ifilename = NULL; printf("analss -- written by devin smith\n"); printf("================================\n"); if(args < 2) { showusage(); return -1; } ifilename = argv[1]; read_ss(ifilename); return 0; } static void showusage() { printf("Please specify arguments in the form of:\n"); printf("analss file\n"); printf(" where \"file\" is a source safe index file.\n"); } static int read_ss(char *filename) { FILE *fp; fp = fopen(filename, "rb"); char magic[21]; unsigned char type; char unknown[12]; char buff[128]; char ssfilename[128]; int i = 0; if(!fp) { perror("Error opening SourceSafe file"); return -1; } fread(magic, 1, 20, fp); magic[20] = 0; /* terminate it */ printf("Reading %s.\n",filename); if(strcmp(magic, "SourceSafe@Microsoft") != 0) { printf("Not a SourceSafe file"); fclose(fp); return -2; } fread(unknown, 1, 12, fp); type = fgetc(fp); if(type == 0x02) printf("[0x20] Type: File\n"); else /* other possible type is 0x01 */ printf("[0x20] Type: Directory\n"); fgetc(fp); /* another unknown */ printf("[0x22] Unknown: 0x%X\n", fgetc(fp)); fread(buff, 1, 17, fp); printf("[0x34] Unknown: 0x%X\n", fgetc(fp)); printf("[0x35] Unknown: 0x%X\n", fgetc(fp)); fread(buff, 1, 2, fp); printf("[0x38] Unknown: 0x%X\n", fgetc(fp)); printf("[0x39] Unknown: 0x%X\n", fgetc(fp)); printf("[0x3A] Unknown: 0x%X\n", fgetc(fp)); printf("[0x3B] Unknown: 0x%X\n", fgetc(fp)); printf("[0x3C] Unknown: 0x%X\n", fgetc(fp)); fgetc(fp); printf("[0x3E] Unknown: 0x%X\n", fgetc(fp)); fread(buff, 1, 3, fp); while((ssfilename[i++] = fgetc(fp)) != 0); printf("Filename: %s\n", ssfilename); fclose(fp); }