Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int tar_search(void *tarfile, size_t tarfile_len, char *path,
- void **pkern_addr, size_t *pkern_len) {
- tar_hdr *tar_header;
- char *tar_end;
- tar_header = (tar_hdr *)tarfile;
- tar_end = (char *)tarfile + tarfile_len;
- kdebug("Checking the tar file from %08x len %08x\n", tarfile, tarfile_len);
- while (1) {
- char filename[110];
- char timebuf[100];
- int remaining;
- int uid;
- int gid;
- int size;
- int mtime;
- int round_size;
- char *basenam;
- /* Check we haven't reached the end of the tar file */
- remaining = tar_end - (char *)tar_header;
- //kdebug("Remaining = %d\n", remaining);
- if (remaining <= 1024)
- break;
- /* Check the filename */
- strncpy(filename, tar_header->filename, 99);
- kdebug("%12s - ", filename);
- basenam = basename(filename);
- //kprintf("Linktype=%c\n", tar_header->linktype);
- uid = strtol(tar_header->uid, NULL, 8);
- gid = strtol(tar_header->gid, NULL, 8);
- size = strtol(tar_header->size, NULL, 8);
- mtime = strtol(tar_header->mtime, NULL, 8);
- if (size == 0) {
- round_size = 0;
- }
- else {
- round_size = (((size-1)/512)+1)*512;
- }
- strcpy(timebuf, asctime(gmtime((const time_t *)&mtime)));
- kdebug("%12s - ", basenam);
- kdebug("%s %3d,%3d %7d bytes %s", tar_header->filemode+3, uid,
- gid, size, timebuf);
- if (!strcmp(path, basenam)) {
- kdebug("Found %s\n", path);
- *pkern_len = size;
- *pkern_addr = (void *)(tar_header+1);
- return 0;
- }
- tar_header = (tar_hdr *)((char *)tar_header + 512 + round_size);
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement