X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Finit.c;h=7ef329298afb136f337d4a1d5cea2adbc4aadda5;hb=ea98629aef9428ca270a76b77e8de49e523be0e4;hp=fb2ae83512150b4f0eb0114eccbc11ec9b5dcad5;hpb=84004dbf9bb2ab8a7f8b968affc53ee3065fa911;p=deb_libnfs.git diff --git a/lib/init.c b/lib/init.c index fb2ae83..7ef3292 100644 --- a/lib/init.c +++ b/lib/init.c @@ -1,10 +1,7 @@ /* Copyright (C) 2010 by Ronnie Sahlberg - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,11 +13,19 @@ */ #define _GNU_SOURCE + +#if defined(WIN32) +#include +#else +#include +#include +#endif + #include #include -#include #include -#include +#include +#include #include #include "slist.h" #include "libnfs.h" @@ -33,22 +38,23 @@ struct rpc_context *rpc_init_context(void) rpc = malloc(sizeof(struct rpc_context)); if (rpc == NULL) { - printf("Failed to allocate rpc context\n"); return NULL; } - bzero(rpc, sizeof(struct rpc_context)); + memset(rpc, 0, sizeof(struct rpc_context)); rpc->encodebuflen = 65536; rpc->encodebuf = malloc(rpc->encodebuflen); if (rpc->encodebuf == NULL) { - printf("Failed to allocate a buffer for rpc encoding\n"); free(rpc); return NULL; } - rpc->auth = authunix_create_default(); +#if defined(WIN32) + rpc->auth = authunix_create("LibNFS", 65535, 65535, 0, NULL); +#else + rpc->auth = authunix_create_default(); +#endif if (rpc->auth == NULL) { - printf("failed to create authunix\n"); free(rpc->encodebuf); free(rpc); return NULL; @@ -60,26 +66,37 @@ struct rpc_context *rpc_init_context(void) } +struct rpc_context *rpc_init_udp_context(void) +{ + struct rpc_context *rpc; + + rpc = rpc_init_context(); + if (rpc != NULL) { + rpc->is_udp = 1; + } + + return rpc; +} + void rpc_set_auth(struct rpc_context *rpc, struct AUTH *auth) { if (rpc->auth != NULL) { auth_destroy(rpc->auth); } - rpc->auth = auth; + rpc->auth = (AUTH *)auth; } void rpc_set_error(struct rpc_context *rpc, char *error_string, ...) { va_list ap; - char *str; if (rpc->error_string != NULL) { free(rpc->error_string); } va_start(ap, error_string); - vasprintf(&str, error_string, ap); - rpc->error_string = str; + rpc->error_string = malloc(1024); + vsnprintf(rpc->error_string, 1024, error_string, ap); va_end(ap); } @@ -124,7 +141,11 @@ void rpc_destroy_context(struct rpc_context *rpc) rpc->auth =NULL; if (rpc->fd != -1) { - close(rpc->fd); +#if defined(WIN32) + closesocket(rpc->fd); +#else + close(rpc->fd); +#endif } if (rpc->encodebuf != NULL) { @@ -137,6 +158,11 @@ void rpc_destroy_context(struct rpc_context *rpc) rpc->error_string = NULL; } + if (rpc->udp_dest != NULL) { + free(rpc->udp_dest); + rpc->udp_dest = NULL; + } + free(rpc); }