elftc_copyfile.c (840e70929b3bc0bfdbccfd8d8626d6e2f29ddbcf) | elftc_copyfile.c (cf781b2e16c26535788abe648f5917f4db09c123) |
---|---|
1/*- 2 * Copyright (c) 2011, Joseph Koshy 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 23 unchanged lines hidden (view full) --- 32 33#include "libelftc.h" 34#include "_libelftc.h" 35 36#if ELFTC_HAVE_MMAP 37#include <sys/mman.h> 38#endif 39 | 1/*- 2 * Copyright (c) 2011, Joseph Koshy 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 23 unchanged lines hidden (view full) --- 32 33#include "libelftc.h" 34#include "_libelftc.h" 35 36#if ELFTC_HAVE_MMAP 37#include <sys/mman.h> 38#endif 39 |
40ELFTC_VCSID("$Id: elftc_copyfile.c 2318 2011-12-11 10:54:27Z jkoshy $"); | 40ELFTC_VCSID("$Id: elftc_copyfile.c 2981 2014-02-01 02:41:13Z jkoshy $"); |
41 42/* 43 * Copy the contents referenced by 'ifd' to 'ofd'. Returns 0 on 44 * success and -1 on error. 45 */ 46 47int 48elftc_copyfile(int ifd, int ofd) --- 25 unchanged lines hidden (view full) --- 74 else 75 buf = NULL; 76#endif 77 78 /* 79 * If mmap() is not available, or if the mmap() operation 80 * failed, allocate a buffer, and read in input data. 81 */ | 41 42/* 43 * Copy the contents referenced by 'ifd' to 'ofd'. Returns 0 on 44 * success and -1 on error. 45 */ 46 47int 48elftc_copyfile(int ifd, int ofd) --- 25 unchanged lines hidden (view full) --- 74 else 75 buf = NULL; 76#endif 77 78 /* 79 * If mmap() is not available, or if the mmap() operation 80 * failed, allocate a buffer, and read in input data. 81 */ |
82 if (buf == NULL) { | 82 if (buf_mmapped == false) { |
83 if ((buf = malloc(sb.st_size)) == NULL) 84 return (-1); | 83 if ((buf = malloc(sb.st_size)) == NULL) 84 return (-1); |
85 if (read(ifd, buf, sb.st_size) != sb.st_size) | 85 if (read(ifd, buf, sb.st_size) != sb.st_size) { 86 free(buf); |
86 return (-1); | 87 return (-1); |
88 } |
|
87 } 88 89 /* 90 * Write data to the output file descriptor. 91 */ 92 for (n = sb.st_size, b = buf; n > 0; n -= nw, b += nw) 93 if ((nw = write(ofd, b, n)) <= 0) 94 break; --- 13 unchanged lines hidden --- | 89 } 90 91 /* 92 * Write data to the output file descriptor. 93 */ 94 for (n = sb.st_size, b = buf; n > 0; n -= nw, b += nw) 95 if ((nw = write(ofd, b, n)) <= 0) 96 break; --- 13 unchanged lines hidden --- |