Add odr_setprint_noclose
[yaz-moved-to-github.git] / util / yaz-url.c
index 56f152b..7a78e67 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2012 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 
@@ -21,7 +21,9 @@ static void usage(void)
     printf(" -m method           Sets HTTP method\n");
     printf(" -O fname            Writes HTTP content to file\n");
     printf(" -p fname            POSTs file at following url\n");
+    printf(" -R num              Set maximum number of HTTP redirects\n");
     printf(" -u user/password    Sets Basic HTTP auth\n");
+    printf(" -v                  Verbose\n");
     printf(" -x proxy            Sets HTTP proxy\n");
     exit(1);
 }
@@ -43,9 +45,15 @@ static char *get_file(const char *fname, size_t *len)
     *len = ftell(inf);
     if (*len)  /* zero length not considered an error */
     {
+        size_t r;
         buf = xmalloc(*len);
         fseek(inf, 0L, SEEK_SET);
-        (void) fread(buf, 1, *len, inf);
+        r = fread(buf, 1, *len, inf);
+        if (r != *len)
+        {
+            yaz_log(YLOG_FATAL|YLOG_ERRNO, "short fread of %s", fname);
+            exit(1);
+        }
     }
     fclose(inf);
     return buf;
@@ -66,7 +74,7 @@ int main(int argc, char **argv)
     int no_urls = 0;
     const char *outfname = 0;
 
-    while ((ret = options("hH:m:O:p:u:x:", argv, argc, &arg))
+    while ((ret = options("h{help}H:m:O:p:R{max-redirs}:u:vx:", argv, argc, &arg))
            != YAZ_OPTIONS_EOF)
     {
         switch (ret)
@@ -103,6 +111,9 @@ int main(int argc, char **argv)
             post_buf = get_file(arg, &post_len);
             method = "POST";
             break;
+        case 'R':
+            yaz_url_set_max_redirects(p, atoi(arg));
+            break;
         case 'u':
             if (strchr(arg, '/'))
             {
@@ -117,6 +128,9 @@ int main(int argc, char **argv)
             else
                 z_HTTP_header_add_basic_auth(odr, &http_headers, arg, 0);
             break;
+        case 'v':
+            yaz_url_set_verbose(p, 1);
+            break;
         case 'x':
             yaz_url_set_proxy(p, arg);
             break;