Advertisement
Guest User

Untitled

a guest
Apr 26th, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. int tar_search(void *tarfile, size_t tarfile_len, char *path,
  2. void **pkern_addr, size_t *pkern_len) {
  3.  
  4. tar_hdr *tar_header;
  5. char *tar_end;
  6.  
  7. tar_header = (tar_hdr *)tarfile;
  8. tar_end = (char *)tarfile + tarfile_len;
  9.  
  10. kdebug("Checking the tar file from %08x len %08x\n", tarfile, tarfile_len);
  11.  
  12. while (1) {
  13. char filename[110];
  14. char timebuf[100];
  15. int remaining;
  16. int uid;
  17. int gid;
  18. int size;
  19. int mtime;
  20. int round_size;
  21. char *basenam;
  22.  
  23. /* Check we haven't reached the end of the tar file */
  24. remaining = tar_end - (char *)tar_header;
  25. //kdebug("Remaining = %d\n", remaining);
  26. if (remaining <= 1024)
  27. break;
  28.  
  29. /* Check the filename */
  30. strncpy(filename, tar_header->filename, 99);
  31.  
  32. kdebug("%12s - ", filename);
  33.  
  34. basenam = basename(filename);
  35. //kprintf("Linktype=%c\n", tar_header->linktype);
  36.  
  37. uid = strtol(tar_header->uid, NULL, 8);
  38. gid = strtol(tar_header->gid, NULL, 8);
  39. size = strtol(tar_header->size, NULL, 8);
  40. mtime = strtol(tar_header->mtime, NULL, 8);
  41.  
  42. if (size == 0) {
  43. round_size = 0;
  44. }
  45. else {
  46. round_size = (((size-1)/512)+1)*512;
  47. }
  48. strcpy(timebuf, asctime(gmtime((const time_t *)&mtime)));
  49.  
  50. kdebug("%12s - ", basenam);
  51. kdebug("%s %3d,%3d %7d bytes %s", tar_header->filemode+3, uid,
  52. gid, size, timebuf);
  53.  
  54. if (!strcmp(path, basenam)) {
  55. kdebug("Found %s\n", path);
  56. *pkern_len = size;
  57. *pkern_addr = (void *)(tar_header+1);
  58. return 0;
  59. }
  60. tar_header = (tar_hdr *)((char *)tar_header + 512 + round_size);
  61. }
  62. return -1;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement