diff options
author | Werner Koch <[email protected]> | 2010-07-16 13:19:45 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2010-07-16 13:19:45 +0000 |
commit | 8b8925a2bdbb12dd537dde20a27cdb1416c2f1ae (patch) | |
tree | 366acb6bb52e61242bb39682ddddb76615c3ba34 /dirmngr/cdblib.c | |
parent | Make it build on W32 again. (diff) | |
download | gnupg-8b8925a2bdbb12dd537dde20a27cdb1416c2f1ae.tar.gz gnupg-8b8925a2bdbb12dd537dde20a27cdb1416c2f1ae.zip |
Some work on porting dirmngr (unfinished)
Ported gpgtar to W32.
Diffstat (limited to 'dirmngr/cdblib.c')
-rw-r--r-- | dirmngr/cdblib.c | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/dirmngr/cdblib.c b/dirmngr/cdblib.c index de60fe926..16d53aed8 100644 --- a/dirmngr/cdblib.c +++ b/dirmngr/cdblib.c @@ -73,6 +73,8 @@ # endif #endif #include <sys/stat.h> + +#include "dirmngr-err.h" #include "cdb.h" #ifndef EPROTO @@ -123,13 +125,17 @@ cdb_init(struct cdb *cdbp, int fd) return -1; /* trivial sanity check: at least toc should be here */ if (st.st_size < 2048) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } fsize = (unsigned)(st.st_size & 0xffffffffu); /* memory-map file */ #ifdef _WIN32 +# ifdef __MINGW32CE__ + hFile = fd; +# else hFile = (HANDLE) _get_osfhandle(fd); +#endif if (hFile == (HANDLE) -1) return -1; hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); @@ -177,7 +183,11 @@ cdb_free(struct cdb *cdbp) HANDLE hFile, hMapping; #endif #ifdef _WIN32 +#ifdef __MINGW32CE__ + hFile = cdbp->cdb_fd; +#else hFile = (HANDLE) _get_osfhandle(cdbp->cdb_fd); +#endif hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); UnmapViewOfFile((void*) cdbp->cdb_mem); CloseHandle(hMapping); @@ -199,7 +209,7 @@ int cdb_read(const struct cdb *cdbp, void *buf, unsigned len, cdbi_t pos) { if (pos > cdbp->cdb_fsize || cdbp->cdb_fsize - pos < len) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } memcpy(buf, cdbp->cdb_mem + pos, len); @@ -243,7 +253,7 @@ cdb_find(struct cdb *cdbp, const void *key, cdbi_t klen) || pos > cdbp->cdb_fsize /* htab start within file ? */ || httodo > cdbp->cdb_fsize - pos) /* entrie htab within file ? */ { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } @@ -258,19 +268,19 @@ cdb_find(struct cdb *cdbp, const void *key, cdbi_t klen) return 0; if (cdb_unpack(htp) == hval) { if (pos > cdbp->cdb_fsize - 8) { /* key+val lengths */ - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } if (cdb_unpack(cdbp->cdb_mem + pos) == klen) { if (cdbp->cdb_fsize - klen < pos + 8) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } if (memcmp(key, cdbp->cdb_mem + pos + 8, klen) == 0) { n = cdb_unpack(cdbp->cdb_mem + pos + 4); pos += 8 + klen; if (cdbp->cdb_fsize < n || cdbp->cdb_fsize - n < pos) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } cdbp->cdb_vpos = pos; @@ -331,7 +341,7 @@ cdb_findinit(struct cdb_find *cdbfp, struct cdb *cdbp, || pos > cdbp->cdb_fsize || cdbfp->cdb_httodo > cdbp->cdb_fsize - pos) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } @@ -368,12 +378,12 @@ cdb_findnext(struct cdb_find *cdbfp) cdbfp->cdb_httodo -= 8; if (n) { if (pos > cdbp->cdb_fsize - 8) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } if (cdb_unpack(cdbp->cdb_mem + pos) == cdbfp->cdb_klen) { if (cdbp->cdb_fsize - cdbfp->cdb_klen < pos + 8) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } if (memcmp(cdbfp->cdb_key, @@ -381,7 +391,7 @@ cdb_findnext(struct cdb_find *cdbfp) n = cdb_unpack(cdbp->cdb_mem + pos + 4); pos += 8 + cdbfp->cdb_klen; if (cdbp->cdb_fsize < n || cdbp->cdb_fsize - n < pos) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } cdbp->cdb_vpos = pos; @@ -410,7 +420,7 @@ cdb_findnext(struct cdb_find *cdbfp) || pos > cdbp->cdb_fsize || cdbfp->cdb_httodo > cdbp->cdb_fsize - pos) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } @@ -425,7 +435,7 @@ cdb_findnext(struct cdb_find *cdbfp) while (!pos); if (pos > cdbp->cdb_fsize - 8) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } @@ -436,7 +446,7 @@ cdb_findnext(struct cdb_find *cdbfp) n = 8 + cdbp->cdb_klen + cdbp->cdb_vlen; if ( pos > cdbp->cdb_fsize || pos > cdbp->cdb_fsize - n) { - errno = EPROTO; + gpg_err_set_errno (EPROTO); return -1; } return 1; /* Found. */ @@ -454,7 +464,7 @@ cdb_bread(int fd, void *buf, int len) while(l < 0 && errno == EINTR); if (l <= 0) { if (!l) - errno = EIO; + gpg_err_set_errno (EIO); return -1; } buf = (char*)buf + l; @@ -555,7 +565,7 @@ cdb_make_add(struct cdb_make *cdbmp, struct cdb_rl *rl; if (klen > 0xffffffff - (cdbmp->cdb_dpos + 8) || vlen > 0xffffffff - (cdbmp->cdb_dpos + klen + 8)) { - errno = ENOMEM; + gpg_err_set_errno (ENOMEM); return -1; } hval = cdb_hash(key, klen); @@ -563,7 +573,7 @@ cdb_make_add(struct cdb_make *cdbmp, if (!rl || rl->cnt >= sizeof(rl->rec)/sizeof(rl->rec[0])) { rl = (struct cdb_rl*)malloc(sizeof(struct cdb_rl)); if (!rl) { - errno = ENOMEM; + gpg_err_set_errno (ENOMEM); return -1; } rl->cnt = 0; @@ -603,7 +613,7 @@ cdb_make_put(struct cdb_make *cdbmp, return -1; if (c) { if (flags == CDB_PUT_INSERT) { - errno = EEXIST; + gpg_err_set_errno (EEXIST); return 1; } else if (flags == CDB_PUT_REPLACE) { @@ -621,7 +631,7 @@ cdb_make_put(struct cdb_make *cdbmp, if (!rl || rl->cnt >= sizeof(rl->rec)/sizeof(rl->rec[0])) { rl = (struct cdb_rl*)malloc(sizeof(struct cdb_rl)); if (!rl) { - errno = ENOMEM; + gpg_err_set_errno (ENOMEM); return -1; } rl->cnt = 0; @@ -633,13 +643,13 @@ cdb_make_put(struct cdb_make *cdbmp, break; default: - errno = EINVAL; + gpg_err_set_errno (EINVAL); return -1; } if (klen > 0xffffffff - (cdbmp->cdb_dpos + 8) || vlen > 0xffffffff - (cdbmp->cdb_dpos + klen + 8)) { - errno = ENOMEM; + gpg_err_set_errno (ENOMEM); return -1; } rl->rec[c].hval = hval; @@ -812,7 +822,7 @@ cdb_make_finish_internal(struct cdb_make *cdbmp) unsigned t, i; if (((0xffffffff - cdbmp->cdb_dpos) >> 3) < cdbmp->cdb_rcnt) { - errno = ENOMEM; + gpg_err_set_errno (ENOMEM); return -1; } @@ -837,7 +847,7 @@ cdb_make_finish_internal(struct cdb_make *cdbmp) /* allocate memory to hold max htable */ htab = (struct cdb_rec*)malloc((hsize + 2) * sizeof(struct cdb_rec)); if (!htab) { - errno = ENOENT; + gpg_err_set_errno (ENOENT); return -1; } p = (unsigned char *)htab; |