[pacman-dev] macros needed when using libalpm
Hi, Just a quick question, it might be pretty obvious but I'm still relatively new at this, so excuse my "noobness." While working on a little app using libalpm, I wanted to use the download callback. But I had a problem, because the total size would always be zero. I didn't understand why it didn't work, especially since it did for pacman, which seemed to do exactly the same as I did. After investigation, I figured out that this was because I needed to use a macro when compiling, namely: #define _FILE_OFFSET_BITS 64 Apparently one of the things this does is turn off_t (type of both size parameters of the dl callback, among other things) into off64_t. I'm guessing that means one more byte to store the data, and therefore explains why with my "regular" off_t I didn't get the correct values. Thing is, I'm not sure how I was supposed to know that using this macro was required of me in order to get things to work properly, so my questions are: - how was I supposed to know? :) As in, is there any indication or something about this written somewhere that I missed? I did look at the README and such, but couldn't find anything. (and if not, shouldn't there be, maybe?) Or is this just usual/common knowledge or something? - any chance there is/are other such things I need to use for things to work properly? I'm guessing not, but just in case... Thanks, -jacky
On Wed, Feb 15, 2012 at 7:30 AM, jjacky <i.am.jack.mail@gmail.com> wrote: > Hi, > > Just a quick question, it might be pretty obvious but I'm still > relatively new at this, so excuse my "noobness." > > While working on a little app using libalpm, I wanted to use the > download callback. But I had a problem, because the total size would > always be zero. I didn't understand why it didn't work, especially since > it did for pacman, which seemed to do exactly the same as I did. > > After investigation, I figured out that this was because I needed to use > a macro when compiling, namely: > #define _FILE_OFFSET_BITS 64 > > Apparently one of the things this does is turn off_t (type of both size > parameters of the dl callback, among other things) into off64_t. I'm > guessing that means one more byte to store the data, and therefore > explains why with my "regular" off_t I didn't get the correct values. > > Thing is, I'm not sure how I was supposed to know that using this macro > was required of me in order to get things to work properly, so my > questions are: > > - how was I supposed to know? :) As in, is there any indication or > something about this written somewhere that I missed? I did look at the > README and such, but couldn't find anything. (and if not, shouldn't > there be, maybe?) > Or is this just usual/common knowledge or something? This is 1) only necessary on 32-bit platforms 2) an unfortunate hack 3) widely known, for the most part- 99% of apps are compiled with this because 32-bits is not enough to have anything > 2GiB signed, or >4 GiB unsigned. > > - any chance there is/are other such things I need to use for things to > work properly? I'm guessing not, but just in case... Don't think so. Your best bet is to look at the pacman side of things as a reference, in addition to the configure.ac file and the generated config.h. -Dan
Alright, thanks a lot. -j On 02/15/12 14:47, Dan McGee wrote: > On Wed, Feb 15, 2012 at 7:30 AM, jjacky <i.am.jack.mail@gmail.com> wrote: >> Hi, >> >> Just a quick question, it might be pretty obvious but I'm still >> relatively new at this, so excuse my "noobness." >> >> While working on a little app using libalpm, I wanted to use the >> download callback. But I had a problem, because the total size would >> always be zero. I didn't understand why it didn't work, especially since >> it did for pacman, which seemed to do exactly the same as I did. >> >> After investigation, I figured out that this was because I needed to use >> a macro when compiling, namely: >> #define _FILE_OFFSET_BITS 64 >> >> Apparently one of the things this does is turn off_t (type of both size >> parameters of the dl callback, among other things) into off64_t. I'm >> guessing that means one more byte to store the data, and therefore >> explains why with my "regular" off_t I didn't get the correct values. >> >> Thing is, I'm not sure how I was supposed to know that using this macro >> was required of me in order to get things to work properly, so my >> questions are: >> >> - how was I supposed to know? :) As in, is there any indication or >> something about this written somewhere that I missed? I did look at the >> README and such, but couldn't find anything. (and if not, shouldn't >> there be, maybe?) >> Or is this just usual/common knowledge or something? > This is > 1) only necessary on 32-bit platforms > 2) an unfortunate hack > 3) widely known, for the most part- 99% of apps are compiled with this > because 32-bits is not enough to have anything > 2GiB signed, or >4 > GiB unsigned. > >> >> - any chance there is/are other such things I need to use for things to >> work properly? I'm guessing not, but just in case... > Don't think so. Your best bet is to look at the pacman side of things > as a reference, in addition to the configure.ac file and the generated > config.h. > > -Dan >
participants (2)
-
Dan McGee
-
jjacky