📄 client.c
字号:
*num_read = num; return(0); } } else{ /* in case of eof this is not really good code */ if(j > 0) memcpy(cptr, cbuf + cbufptr, j); cbufptr += j; *num_read = num; return(0); } } return(0); /* NOTREACHED */}Int32bu_input(UChar * buf, Int32 num, AarParams * params){ Int32 i, r; i = receive(buf, num, &r); if(i && i != ENDOFFILEREACHED && i != ENDOFTAPEREACHED){ fprintf(params->errfp, T_("%sError: unexpected fault receiving from server: %s. Trying to continue ...\n"), (i > 0 ? T_("Server ") : ""), (i > 0 ? fault_string(i) : (UChar *) strerror(-i))); } try_optimize_throughput(); return(r);}Int32getcartandfile(AarParams * params){ static Flag first_call = YES; static Int32 prev_cart = -1; UChar buf[10]; Int32 r = 0; if(filenum_valid) return(0); if(QUEUEDOP){ r = append_to_queue(QUERYPOSITION, NULL, 7, NULL, 0); if(first_call){ r = post_process_rest_of_queue(0); } } else{ if( (r = send_cmd(QUERYPOSITION)) ) return(r); if(read_forced(commfd, buf, 7) != 7) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 7; if( (r = result()) ) return(r); xref_to_UnsN(&cart, buf, 24); xref_to_Uns32(&filenum, buf + 3); } filenum_valid = YES; bytes_wr_unkn_pos = 0; if(first_call){ params->vars.firstcart = cart; params->vars.firstfile = filenum; first_call = NO; } if(cart != prev_cart){ params->vars.used_carts = add_to_Uns32Ranges(params->vars.used_carts, cart, cart); if(params->vars.used_carts) pack_Uns32Ranges(params->vars.used_carts, NULL); prev_cart = cart; } return(r);}Int32getrdcartandfile(AarParams * params){ static Flag first_call = YES; static Int32 prev_cart = -1; UChar buf[10]; Int32 r = 0; if(rdfilenum_valid) return(0); if(QUEUEDOP){ r = append_to_queue(QUERYRDPOSITION, NULL, 7, NULL, 0); if(first_call){ r = post_process_rest_of_queue(0); } } else{ if( (r = send_cmd(QUERYRDPOSITION)) ) return(r); if(read_forced(commfd, buf, 7) != 7) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 7; if( (r = result()) ) return(r); xref_to_UnsN(&rdcart, buf, 24); xref_to_Uns32(&rdfilenum, buf + 3); } rdfilenum_valid = YES; if(first_call){ params->vars.firstcart = rdcart; params->vars.firstfile = rdfilenum; first_call = NO; } if(cart != prev_cart){ params->vars.used_carts = add_to_Uns32Ranges(params->vars.used_carts, rdcart, rdcart); if(params->vars.used_carts) pack_Uns32Ranges(params->vars.used_carts, NULL); prev_cart = rdcart; } return(r);}Int32getwrcartandfile(AarParams * params){ static Flag first_call = YES; static Int32 prev_cart = -1; UChar buf[10]; Int32 r = 0; if(wrfilenum_valid) return(0); if(QUEUEDOP){ r = append_to_queue(QUERYWRPOSITION, NULL, 7, NULL, 0); if(first_call) r = post_process_rest_of_queue(0); } else{ if( (r = send_cmd(QUERYWRPOSITION)) ) return(r); if(read_forced(commfd, buf, 7) != 7) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 7; if( (r = result()) ) return(r); xref_to_UnsN(&wrcart, buf, 24); xref_to_Uns32(&wrfilenum, buf + 3); } wrfilenum_valid = YES; bytes_wr_unkn_pos = 0; if(first_call){ params->vars.firstcart = wrcart; params->vars.firstfile = wrfilenum; first_call = NO; } if(cart != prev_cart){ params->vars.used_carts = add_to_Uns32Ranges(params->vars.used_carts, wrcart, wrcart); if(params->vars.used_carts) pack_Uns32Ranges(params->vars.used_carts, NULL); prev_cart = cart; } return(r);}Int32getint(UChar cmd, Int32 * res, Int32 size, Flag wait_if_buffered){ UChar buf[10]; Int32 i; if(QUEUEDOP){ i = append_to_queue(cmd, NULL, size, NULL, 0); if(i) return(i); if(wait_if_buffered) return(post_process_rest_of_queue(0)); return(i); } if( (i = send_cmd(cmd)) ) return(i); if(read_forced(commfd, buf, size) != size) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + size; if( (i = result()) ) return(i); xref_to_UnsN(res, buf, (size << 3)); return(0);}Int32getnumcarts(AarParams * params, Flag wait_if_buffered){ static UChar have_numcarts = 0; Int32 i; if(have_numcarts) return(0); i = getint(QUERYNUMCARTS, &numcarts, 3, wait_if_buffered); if(i) return(i); have_numcarts = 1; return(0);}Int32gettapeblocksize(AarParams * params, Flag wait_if_buffered){ return(getint(QUERYTAPEBLOCKSIZE, &tapeblocksize, 4, wait_if_buffered));}Int32getcartset(AarParams * params, Flag wait_if_buffered){ return(getint(QUERYCARTSET, &cartset, 3, wait_if_buffered));}Int32getusedtapes(UChar ** retbuf, UChar * clientid){ UChar *cptr, buf[4]; Int32 l, n; n = 1 + 1 + (l = strlen(clientid)); cptr = NEWP(UChar, n); if(!cptr) return(-errno); cptr[0] = QUERYNEEDEDTAPES; cptr[1] = (UChar) l; memcpy(cptr + 2, clientid, l); if(write_forced(commfd, cptr, n) != n) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + n; if(read_forced(commfd, buf, 4) != 4) return(- errno); xref_to_Uns32(&l, buf); l++; cptr = RENEWP(cptr, UChar, l); if(!cptr) return(-errno); if(read_forced(commfd, cptr, l) != l) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 4 + l; l--; n = (Int32) cptr[l]; cptr[l] = '\0'; if(l && (n == COMMAND_OK)){ *retbuf = cptr; } else{ *retbuf = NULL; free(cptr); } return(n);}Int32getbufferwithcmd(UChar * buffer, Int32 len, Int32 cmd, Flag wait_if_buffered){ Int32 r = 0; UChar *rbuf = NULL; rbuf = NEWP(UChar, len); if(!rbuf){ r = - errno; GETOUT; } if(QUEUEDOP){ r = append_to_queue(cmd, rbuf, len, NULL, 0); if(r) GETOUT; if(wait_if_buffered) r = post_process_rest_of_queue(0); GETOUT; } if( (r = send_cmd(cmd)) ) GETOUT; if(read_forced(commfd, rbuf, len) != len){ r = - errno; GETOUT; } bytes_transferred += ESTIM_PROT_OVERHEAD + len; memcpy(buffer, rbuf, len * sizeof(UChar)); r = result(); getout: ZFREE(rbuf); return(r);}Int32setcart(Int32 cartnum){ UChar buf[8], cmd; Int32 i; filenum_valid = rdfilenum_valid = NO; cmd = SETCARTRIDGE; if(cartnum < 0){ cartnum = - cartnum; cmd = SETRAWCARTRIDGE; } buf[0] = cmd; UnsN_to_xref(buf + 1, cartnum, 24); reset_data_buffer; if(QUEUEDOP){ i = append_to_queue(cmd, NULL, 0, buf + 1, 3); return(i); } if(write_forced(commfd, buf, 4) != 4) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 4; if( (i = result()) ) return(i); cart = cartnum; return(0);}Int32setcartset(Int32 cset){ UChar buf[8]; Int32 i; filenum_valid = wrfilenum_valid = rdfilenum_valid = NO; buf[0] = SETCARTSET; UnsN_to_xref(buf + 1, cset, 24); if(QUEUEDOP){ i = append_to_queue(buf[0], NULL, 0, buf + 1, 3); return(i); } if(write_forced(commfd, buf, 4) != 4) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 4; if( (i = result()) ) return(i); cartset = cset; return(0);}Int32setfilenum(Int32 filen){ UChar buf[8], cmd; Int32 i; cmd = SETFILE; if(filen < 0){ filen = - filen; cmd = SETRAWFILE; } filenum_valid = wrfilenum_valid = rdfilenum_valid = NO; buf[0] = cmd; Uns32_to_xref(buf + 1, filen & 0x7fffffff); reset_data_buffer; if(QUEUEDOP){ i = append_to_queue(cmd, NULL, 0, buf + 1, 4); return(i); } if(write_forced(commfd, buf, 5) != 5) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 5; if( (i = result()) ) return(i); filenum = filen; return(0);}Int32sendint(UChar cmd, Int32 n, Int32 size){ UChar buf[8]; Int32 i; buf[0] = cmd; UnsN_to_xref(buf + 1, n, size << 3); if(QUEUEDOP){ i = append_to_queue(cmd, NULL, 0, buf + 1, size); return(i); } size++; if(write_forced(commfd, buf, size) != size) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + size; return(result());}Int32send_commbufsiz(Int32 cbsize){ return(sendint(SETCOMMBUFSIZ, cbsize, 4));}Int32getnumbytesvalid(Int32 * numbytes){ UChar buf[8]; Int32 i; if(QUEUEDOP){ i = append_to_queue(GETNUMREADVALID, NULL, 0, buf + 1, 4); return(i); } if( (i = send_cmd(GETNUMREADVALID)) ) return(i); if(read_forced(commfd, buf, 4) != 4) return(- errno); bytes_transferred += ESTIM_PROT_OVERHEAD + 4; xref_to_Uns32(numbytes, buf); return(result());}Int32send_identity(UChar * idstr){ UChar buf[129]; memset(buf, 0, 129 * sizeof(UChar)); buf[0] = CLIENTIDENT; strcpy(buf + 1, idstr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -