]>
git.saurik.com Git - apt.git/blob - methods/copy.cc
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: copy.cc,v 1.1 1998/10/25 01:57:07 jgg Exp $
4 /* ######################################################################
6 Copy URI - This method takes a uri like a file: uri and copies it
7 to the destination URI.
9 ##################################################################### */
11 // Include Files /*{{{*/
12 #include <apt-pkg/fileutl.h>
14 #include <apt-pkg/error.h>
21 // Fail - Generate a failure message /*{{{*/
22 // ---------------------------------------------------------------------
26 string Err
= "Undetermined Error";
27 if (_error
->empty() == false)
28 _error
->PopMessage(Err
);
30 printf("400 URI Failure\n"
32 "Message: %s\n\n",URI
.c_str(),Err
.c_str());
40 SetNonBlock(STDIN_FILENO
,true);
42 printf("100 Capabilities\n"
44 "Pipeline: true\n\n");
46 vector
<string
> Messages
;
49 if (WaitFd(STDIN_FILENO
) == false ||
50 ReadMessages(STDIN_FILENO
,Messages
) == false)
53 while (Messages
.empty() == false)
55 string Message
= Messages
.front();
56 Messages
.erase(Messages
.begin());
58 // Fetch the message number
60 int Number
= strtol(Message
.c_str(),&End
,10);
61 if (End
== Message
.c_str())
63 cerr
<< "Malformed message!" << endl
;
67 // We only understand 600 URI Fetch messages
72 string URI
= LookupTag(Message
,"URI");
73 string Target
= LookupTag(Message
,"Filename");
76 string::size_type Pos
= URI
.find(':');
77 if (Pos
== string::npos
)
79 _error
->Error("Invalid message");
83 string File
= string(URI
,Pos
+1);
85 // Start the reply message
86 string Result
= "201 URI Done";
87 Result
+= "\nURI: " + URI
;
88 Result
+= "\nFileName: " + Target
;
90 // See if the file exists
91 FileFd
From(File
,FileFd::ReadOnly
);
92 FileFd
To(Target
,FileFd::WriteEmpty
);
94 if (_error
->PendingError() == true)
101 if (CopyFile(From
,To
) == false)
109 if (write(STDOUT_FILENO
,Result
.begin(),Result
.length()) !=
110 (signed)Result
.length())