Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.7 KiB

4 years ago
  1. /*
  2. * Module: conv.c
  3. * Author: Mark I. Himelstein, Himelsoft, Inc.
  4. * Purpose: dummy to manipulate conv structure until we get
  5. * converter sources
  6. */
  7. #include "conv.h"
  8. //#include <sys/file.h>
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11. #include <fcntl.h>
  12. /* macros to access the parts of an object file */
  13. #define PFILEHEADER(praw) ((PIMAGE_FILE_HEADER)(praw))
  14. #define PAOUTHEADER(praw) ((PIMAGE_OPTIONAL_HEADER)(praw+IMAGE_SIZEOF_FILE_HEADER))
  15. #define PSCNHEADER(praw) ((PIMAGE_SECTION_HEADER)(praw+IMAGE_SIZEOF_FILE_HEADER+PFILEHEADER(praw)->SizeOfOptionalHeader))
  16. #define PHDRR(praw) ((pHDRR)(praw+PFILEHEADER(praw)->PointerToSymbolTable))
  17. /* Assumes phdr has been initialized */
  18. #define PFD(praw, phdrr) ((pFDR)(praw + phdrr->cbFdOffset))
  19. #define PLINE(praw, phdrr) ((char *)(praw + phdrr->cbLineOffset))
  20. #define PPD(praw, phdrr) ((struct pdr *)(praw + phdrr->cbPdOffset))
  21. #define PSYM(praw, phdrr) ((pSYMR)(praw + phdrr->cbSymOffset))
  22. #define PEXT(praw, phdrr) ((pEXTR)(praw + phdrr->cbExtOffset))
  23. #define PSS(praw, phdrr) ((char *)(praw + phdrr->cbSsOffset))
  24. #define PSSEXT(praw, phdrr) ((char *)(praw + phdrr->cbSsExtOffset))
  25. #define PAUX(praw, phdrr) ((pAUXU)(praw + phdrr->cbAuxOffset))
  26. #define PRFD(praw, phdrr) ((unsigned long *)(praw +phdrr->cbRfdOffset))
  27. extern void
  28. conv_open(
  29. struct conv_s *conv, /* caller must allocate this */
  30. char *name) /* caller must insure this is permanent */
  31. {
  32. /*
  33. * open file with name, read it in, set up the
  34. * conv structure and verify it's something
  35. * we want to convert.
  36. */
  37. conv->name = name;
  38. /* open file descriptor */
  39. conv->fd = _open(name, O_RDONLY|O_BINARY);
  40. if (conv->fd < 0) {
  41. fatal("cannot open %s\n", name);
  42. } /* if */
  43. #if 0
  44. /* call stat for size */
  45. struct stat statb; /* for stat call to get size */
  46. if (fstat(conv->fd, &statb) != 0) {
  47. fatal("cannot stat %s(file descriptor %d)\n", name, conv->fd);
  48. } /* if */
  49. conv->size = statb.st_size;
  50. #else
  51. conv->size = _lseek(conv->fd, 0, SEEK_END);
  52. _lseek(conv->fd, 0, SEEK_SET);
  53. #endif
  54. #ifndef MMAP
  55. /* allocate memory space for file contents */
  56. conv->praw = (char *)malloc (conv->size);
  57. if (conv->praw == 0) {
  58. fatal("cannot malloc space for %s (size = %d)\n", name, conv->size);
  59. } /* if */
  60. /* read whole file */
  61. if (_read(conv->fd, conv->praw, conv->size) != conv->size) {
  62. fatal("cannot read %s(file descriptor %d)\n", name, conv->fd);
  63. } /* if */
  64. #endif /* MMAP */
  65. /* setup pointer for constiuent tables and check for validity */
  66. conv->pfileheader = PFILEHEADER(conv->praw);
  67. if (conv->pfileheader->PointerToSymbolTable == 0) {
  68. fatal("no symbol table in %s\n", name);
  69. } /* if */
  70. conv->paoutheader = PAOUTHEADER(conv->praw);
  71. if (conv->paoutheader->Magic != 0407) {
  72. fatal("expected omagic in %s(got %04o)\n", name,
  73. conv->paoutheader->Magic);
  74. } /* if */
  75. conv->pscnheader = PSCNHEADER(conv->praw);
  76. conv->phdrr = PHDRR(conv->praw);
  77. conv->pline = PLINE(conv->praw, conv->phdrr);
  78. conv->pauxu = PAUX(conv->praw, conv->phdrr);
  79. conv->prfd = PRFD(conv->praw, conv->phdrr);
  80. conv->ppdr = PPD(conv->praw, conv->phdrr);
  81. conv->pfdr = PFD(conv->praw, conv->phdrr);
  82. conv->psymr = PSYM(conv->praw, conv->phdrr);
  83. conv->pextr = PEXT(conv->praw, conv->phdrr);
  84. conv->pssext = PSSEXT(conv->praw, conv->phdrr);
  85. conv->pss = PSS(conv->praw, conv->phdrr);
  86. } /* conv_open */
  87. extern void
  88. conv_close( struct conv_s * conv)
  89. {
  90. _close( conv->fd );
  91. } /* conv_close() */